Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C方法如何访问被调用方;伊瓦尔?_Objective C_Oop_Instance Variables_Self - Fatal编程技术网

Objective-C方法如何访问被调用方;伊瓦尔?

Objective-C方法如何访问被调用方;伊瓦尔?,objective-c,oop,instance-variables,self,Objective C,Oop,Instance Variables,Self,我正在阅读苹果的文档(PDF链接)。在第18页,在接收者的实例变量下,我看到了这个 方法可以自动访问接收对象的实例 变量。您不需要将它们作为参数传递给方法。 例如,上面说明的primaryColor方法不需要 参数,但它可以找到otherRect的主颜色并返回 信息技术每个方法都假定接收方及其实例变量, 无需将它们声明为参数 此约定简化了Objective-C源代码。它还支持 面向对象的程序员思考对象和消息的方式。 信息被发送给接收者就像信件被发送给你的朋友一样 家。消息参数将信息从外部传送到外

我正在阅读苹果的文档(PDF链接)。在第18页,在接收者的实例变量下,我看到了这个

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

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


我试图更好地理解他们在描述什么;这是像Python的
self
参数,还是风格?

虽然我不会说这是对Python的“猛烈抨击”,但它肯定是指面向对象的Python风格(老实说,它是从C中可用的“伪面向对象”派生出来的(它是否真的是面向对象是另一个论坛的争论)


请记住,Python的作用域概念与世界其他地方非常不同——每种方法或多或少都存在于自己的小现实中。这与具有“This”变量或某种形式的隐式实例构造的更“自我意识”的语言形成了对比。

Objective-C是C的严格超集

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

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

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

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


它还说,除非是公共的,否则不能从另一个类实例访问实例变量。

不要将Objective-C与Python进行比较……我正在寻找其他方法来改进这一点。顺便说一句,这个问题对我来说似乎很好。这家伙只是想从python背景中对文档进行一些澄清。没有理由关闭IMHO……事实上,Python的灵感来源于Objective-C。Python的仁慈的终身独裁者Guido van Rossum是一个狂热的下一个用户,并在平台上编写了大量代码。Python中的显式
self
参数与Objective-C中的隐式
self
非常相似,但与Python的其他原理非常相似,它避免了魔法。而实例变量访问之所以可能是因为隐藏的
self
参数。编译器知道,在实例方法中,对ivar的访问实际上应该是
self->ivar