2010-01-28 174 views
4

考慮以下幾點:這個語法在Objective-C中的含義是什麼?

- (id)initWithTitle:(NSString *)newTitle 
    boxOfficeGross:(NSNumber *)newBoxOfficeGross 
      summary:(NSString *)newSummary; 

這是什麼意思?我猜想它會返回id,並且需要三個參數,但是語法的每個部分是什麼意思?我來自Ruby/JS背景,我發現這個語法有點難以理解。

+0

Dave的答案是可靠的,但我會添加一個鏈接到Objective-C開發人員指南,因爲它是一種很好的語言介紹。此外,Objective-C **沒有命名參數**(不是你建議它做的......只是不要輕易犯錯,因爲你學習的語言)! – bbum 2010-01-28 22:36:29

+0

它是Objective-c中的一個函數調用,也稱爲「將消息傳遞給對象」。你將消息傳遞給像這樣的對象:'[someobject processPersonWithFirstName:a secondName:b age:34];' – stefanB 2010-01-28 22:53:30

+0

bbum - 你有一個URL嗎? – 2010-01-28 23:12:42

回答

5

這是一個名爲initWithTitle:boxOfficeGross:summary:的實例方法(即,不是靜態或「類」方法),它返回id(通用對象)類型的對象。它有三個參數:一個String對象,一個Number對象和另一個String對象。

你調用它是這樣的:

NSNumber * gross = [NSNumber numberWithInteger:1878025999] 
Movie * avatar = [[Movie alloc] initWithTitle:@"Avatar" 
           boxOfficeGross:gross 
             summary:@"Pocahontas in the 22nd century"]; 
//or you can do it all on one line, like so: 
Movie * avatar = [[Movie alloc] initWithTitle:@"Avatar" boxOfficeGross:gross summary:@"Pocahontas in the 22nd century"]; 
4
  • -意味着該方法是實例方法,不是類方法
  • (id)表示它會返回一個id,正如你猜測的那樣。
  • initWithTitle:boxOfficeGross:summary:是方法名稱的一部分。在Objective-C中,每個參數通常都有一個關聯的方法名稱部分。該方法的全名是initWithTitle:boxOfficeGross:summary
  • (NSString *)等,表示參數的類型。
  • newTitle等等,是參數的名稱。
0

-指定一個實例方法,而如果它是一個+它將是一個類方法。

(id)是該方法返回的內容,它只是對對象的引用。

該行的其餘部分顯示參數。當調用該函數,你寫出來的:前,每個參數的部分,如[class initWithTitle:@"my title"];

之所以有兩個名字每一個參數是因爲該方法本身會參考變量由什麼是:後,所以標題將是newTitle

起初這讓我感到困惑,但它有其優點。

此外,括號內每個參數的部分都是參數的對象類型。 (NSString *)是指向NSString的指針。如果您要傳遞不是NSObject的內容,例如NSIntger,則不需要*。你可以簡單地做: -(id)initWithInteger:(NSIntger)newInteger;