【问题标题】:About calling my properties [duplicate]关于调用我的属性[重复]
【发布时间】:2011-04-03 18:58:55
【问题描述】:

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

有什么不同吗?我可以使用任何?如果我出于某种原因同时使用两者,两者都会影响同一个对象,对吧?

【问题讨论】:

  • 是的,有区别。使用页面右上角的搜索框查找之前针对此问题发布的十几个答案中的任何一个。

标签: iphone objective-c ios properties


【解决方案1】:

是的,有区别。 self.dPad 调用 dPad 的 getter 方法,而 dPad 只是直接访问实例变量。如果您覆盖 getter,则不会调用您可能在 getter 中执行的任何其他检查或设置或内存管理。作为一种好的做法,调用 getter 可能比直接访问更好,即使您只是在合成而不是覆盖。

【讨论】:

  • 那么作为一个好习惯,我将始终使用 self.dPad?
  • 除非您出于某种原因明确希望绕过 getter,否则我会这样做。
  • @Omega:通常是的。在-init-dealloc 中使用访问器存在一些争议。 Mike Ash 在他的博客上写过:mikeash.com/pyblog/…
【解决方案2】:

一个直接访问属性,另一个使用访问器。

早在 Apple 发明属性的点语法之前,就可以直接访问实例变量。

self.dPad 被编译器透明地重写:

self.dPad = someOtherDPad;
[self setDPad:someOtherDPad];

// or for getters

[self.dPad doSomething];
[[self getDPad] doSomething];

使用属性和访问器允许更大的灵活性,例如键值观察只能使用访问器。缺点是性能损失很小,在大多数情况下您不应该注意到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 2011-03-09
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多