关于调用我的属性

时间:2011-04-03 18:58:55

标签: iphone objective-c ios properties

  

可能重复:
  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

有什么区别吗?我可以用吗?如果我因为某种原因使用了两者,两者都会影响同一个对象,对吗?

2 个答案:

答案 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];

使用属性和访问器可以提供更大的灵活性,例如,只有使用访问器才能实现键值观察。缺点是性能损失很小,在大多数情况下你不应该注意到这一点。