2011-11-28 108 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,因为它可能是你有各种控制器的情况下,你不想为所有人做同样的事情。 :)你用它来区分它们。

如果你是由你自己调用此方法则有第一个参数是一些如何多余的(因为在大多数情况下,你就已经知道这些信息)

希望它能帮助。

相关问题