Objective-C方法如何访问被调用者的ivars?

时间:2011-09-23 22:31:26

标签: objective-c oop instance-variables self

我正在阅读Apple的文档,The Objective-C Programming Language(PDF链接)。在pg。 18,在接收者的实例变量下,我看到了这一点。

  

方法可以自动访问接收对象的实例   变量。您不需要将它们作为参数传递给方法。   例如,上面说明的primaryColor方法不需要   参数,但它可以找到otherRect的主要颜色并返回   它。每个方法都假定接收者及其实例变量,   无需将它们声明为参数。

     

此约定简化了Objective-C源代码。它也支持   面向对象程序员思考对象和消息的方式。   信件被发送到接收器,就像信件被发送到您的   家。消息参数将信息从外部传递到   接收器;他们不需要把接收器带到自己身上。

我想更好地理解他们所描述的内容;这是Python的self参数,还是样式?

2 个答案:

答案 0 :(得分:9)

Objective-C是C的严格超集。

所以Objective-C方法是“只是”函数指针,实例是“只是”C结构。

方法有两个隐藏参数。第一个是self(当前实例),第二个是_cmd(方法的选择器)。

但是文档在第18页中描述的是从方法访问类实例变量。

它只是说类的方法可以访问该类的实例变量。 从面向对象的角度来看,这是非常基本的,但不是从C角度来看。

它还表示你不能从另一个类实例访问实例变量,除非它们是公共的。

答案 1 :(得分:1)

虽然我不会说这是对Python的“大满贯”,但它肯定是指对象方向的Python风格(诚实地说,它源自C中可​​用的“伪对象方向”)(是否真的是OO是对另一个论坛的辩论))。

值得记住的是,Python与世界其他地方的范围概念截然不同 - 每种方法或多或少存在于其自身的小现实中。这与更多“自我意识”语言形成对比,这些语言要么具有“this”变量,要么具有某种形式的隐式实例构造。