2011-11-28 105 views
0

我想了解objC中方法名稱之前的「某事」的含義。下面一個例子:ObjectiveC:返回值和方法名稱之間的東西

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
     shouldContinueAfterSelectingPerson:(ABRecordRef)person 
           property:(ABPropertyID)property 
           identifier:(ABMultiValueIdentifier)identifier 

方法名稱爲shouldContinueAfterSelectingPerson,該方法有三個參數,有返回值(BOOL)但什麼是peoplePickerNavigationController:(ABPeoplePickerNavigationController *)作用?

它不是返回值,它不是方法參數(因爲在方法名稱前面出現),所以它是什麼?

+1

看到這個[Objective-C編程語言 - 消息語法](http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html#//apple_ref/ doc/uid/TP30001163-CH11-SW6) – beryllium

回答

2

目標C的方法分成4個分量(或因此我猜想,因爲這是我怎麼看它)

我會打破這種方法:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
     shouldContinueAfterSelectingPerson:(ABRecordRef)person 
           property:(ABPropertyID)property 
           identifier:(ABMultiValueIdentifier)identifier 

-表示它是一個實例方法,你需要分配這個類的一個實例來使用它。

(BOOL)表示應該返回BOOLYESNO

的方法中,通過選擇UID定義,peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:

這不像你所說的全部方法名。

最後一部分是參數。這些都很自我解釋。

+0

好吧,談論更多的Java這種方法有4個參數:peoplePicker,person,property和identifier。這是對的嗎?謝謝! – user1069449

+0

是的,請注意,這些參數的類在之前預先由(Class)表示: – DanZimm

0

peoplePickerNavigationController:參數的作用是允許多個ABPeoplePickerNavigationController對象使用對象的單個實例作爲委託。

這樣,如果存在多個ABPeoplePickerNavigationController對象,您將知道哪個選擇器執行了選擇(並調用到您的委託方法中)。

希望這有助於消除你的困惑!

0

方法名稱不是shouldContinueAfterSelectingPerson而是peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:,它需要4個參數。

-1

方法名稱是peoplePickerNavigationController,而不是「shouldContinueAfterSelectingPerson」。實際上,該方法的簽名是peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:,因爲在Objective-C方法中,名稱/簽名由所有參數組成。

+0

好吧,也許現在我明白了。方法名稱是peoplePickerNavigationController,而shouldContinueAfterSelectingPerson是四個參數之一。這是對的嗎?謝謝! – user1069449

+0

方法_name_是'peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:'。 _signature_是完全不同的東西;在Obj-C中,它描述了返回值和參數的類型。 @user –

+0

我沒有downvote你,事實上我不能投票,因爲我的信譽太低... – user1069449

0

假設你正在談論'一般'而不是專門討論這種方法。

那麼它是方法簽名的所有部分。每個帶有冒號(:)的部分都是一個字符串,它是方法名稱的有效部分。

0

否,方法名(或嚴格地說,選擇器)是

peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier: 

這僅僅是其第一個參數是導航控制器發送該消息。這是爲了讓接收者知道哪個對象發送了消息。這是委託方法的標準範例,因此一個對象可以委託給多個其他對象。

1

實際上,在這種情況下,方法名是

peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier: 

而且它有4個參數。

這是一種特殊情況,因爲這是一種協議的方法。 一般而言,您不會調用/發送協議方法,它們會被調用,您應該實現它們以對特定情況做出適當的反應。

正如在其他答案中所說的,你得到peoplePickerNavigationController,因爲它可能是你有各種控制器的情況下,你不想爲所有人做同樣的事情。 :)你用它來區分它們。

如果你是由你自己調用此方法則有第一個參數是一些如何多餘的(因爲在大多數情況下,你就已經知道這些信息)

希望它能幫助。

相關問題