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找到的链接。