选择器是一个对象吗?

时间:2012-06-16 03:29:46

标签: objective-c

来自Apple的Obj-C文档:

  

如果方法返回一个对象,则发送给nil的消息返回0   (零)。例如:

   Person *motherInLaw = [[aPerson spouse] mother]; 
     

如果此处的配偶对象为nil,则将母亲发送给nil并返回该方法   为零。

所以spouse这里可以是一个对象吗?如果它是一个对象,它必须是一个选择器吗?

2 个答案:

答案 0 :(得分:0)

选择器就像C ++类中的类方法,它是您调用的方法的名称,您可以定义它接受的参数的数量和类型。它根本不是一个对象。在上面的示例中,“配偶”是您调用的方法名称。它绝不是一个对象。

编辑:

代码

Person *motherInLaw = [[aPerson spouse] mother];

可以扩展到:

Person *theSpouse = [aPerson spouse];
Person *motherInLaw = [theSpouse mother];

如您所见,“母亲”方法在“配偶”方法的返回值上调用。这应该清除任何混淆。

答案 1 :(得分:0)

该文件实际上是正确的。这只是objective-c的语法。事实上,在这种情况下,aPerson正在为配偶调用getter方法。如果在调用此配置时尚未设置配偶,则它将返回nil,此时将母亲的getter方法发送给配偶会导致方法调用为nil。

你所看到的确实是一种方法 - 只是一种返回配偶类型对象的方法,而我上面的海报已经描述了选择器是什么。