可能重复:
Difference between self.instanceVar = X and instanceVar = X in Obj-c
@interface Whatever : Something
{
DPad *dPad;
}
@property (retain) DPad *dPad;
@end
然后我合成:
@synthesize dPad;
我注意到我可以用我的所有dPad
self.dPad
只是
dPad
有什么区别吗?我可以用吗?如果我因为某种原因使用了两者,两者都会影响同一个对象,对吗?
答案 0 :(得分:1)
是的,有区别。 self.dPad调用dPad的getter方法,而dPad只是直接访问实例变量。如果覆盖getter,则不会调用您在getter中执行的任何其他检查或设置或内存管理。作为一个好习惯,调用getter可能比直接访问更好,即使你只是在合成而不是覆盖。
答案 1 :(得分:1)
一个人直接访问该属性,另一个使用访问者。
在Apple发明属性的点语法之前很久就可以直接访问实例变量。
self.dPad
由编译器透明地重写:
self.dPad = someOtherDPad;
[self setDPad:someOtherDPad];
// or for getters
[self.dPad doSomething];
[[self getDPad] doSomething];
使用属性和访问器可以提供更大的灵活性,例如,只有使用访问器才能实现键值观察。缺点是性能损失很小,在大多数情况下你不应该注意到这一点。