Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 &引用;“自我”;在目标C中_Objective C_Self - Fatal编程技术网

Objective c &引用;“自我”;在目标C中

Objective c &引用;“自我”;在目标C中,objective-c,self,Objective C,Self,可能重复: 假设我有一个类“Person”,带有一个实例变量“age”。来自Python,在为Person类编写方法时,我习惯于使用“self.age”访问age,但是在Objective C中,我注意到在引用实例变量时接受和“self.age”和“age”(而在Python中,只有前者可以工作) 当没有明确指定您所指的实例变量时,它是否默认为“self”?不明确地指定self是否被认为是不好的风格?如果没有,是否有关于何时使用self.age和何时使用age的约定?使用self使用访问器和m

可能重复:

假设我有一个类“Person”,带有一个实例变量“age”。来自Python,在为Person类编写方法时,我习惯于使用“self.age”访问age,但是在Objective C中,我注意到在引用实例变量时接受和“self.age”和“age”(而在Python中,只有前者可以工作)


当没有明确指定您所指的实例变量时,它是否默认为“self”?不明确地指定self是否被认为是不好的风格?如果没有,是否有关于何时使用self.age和何时使用age的约定?

使用
self
使用访问器和mutator方法,而不使用它直接修改实例变量。要使用
self.age
,必须使用
@property
语法将
age
声明为属性。我通常尽可能地使用
self

age
self.age
是两件完全不同的事情。在实例方法内部,对象的实例变量在作用域中隐式定义,除非被局部变量隐藏(请参见)。这就是为什么
age
工作正常的原因。使用点表示法时,您引用的是a,这意味着您实际上是在调用
[self age]
,而不是直接访问实例变量。还可以使用结构指针操作符(
->
)直接访问实例变量。这很少使用,但可以用于直接访问同一类或不同类的其他实例中的变量,以及self。因此,
age
self->age
是完全一样的,但是
self.age
是完全不同的。

这里已经解释过Guido喜欢“显式”引用成员变量,所以他决定它们都应该写
self。ivar
Objective-C对ivar和方法名有一个单独的名称空间,还有一个使用“properties”的新语法元素,
self.ivar
实际上是方法调用的糖。要在ObjC中对ivar进行简单访问,您需要编写简单的ivar名称。点语法实际上是非法的,除非您使用的是属性,因为
self
是指针,Obj-C是C,诸如此类。(参见ughoavgfhw的回答):)请查看Henrik找到的链接。