假设我创建了一个自定义UIView
子类,它有一个名为imageView
. 我合成imageView
如下:
@synthesize imageView = _imageView;
_imageView
使用而不是self.imageView
在我的所有自定义类方法中使用是否安全?
假设我创建了一个自定义UIView
子类,它有一个名为imageView
. 我合成imageView
如下:
@synthesize imageView = _imageView;
_imageView
使用而不是self.imageView
在我的所有自定义类方法中使用是否安全?
不,直接访问 ivar是不安全的。只是为了说清楚:
_imageView
简称self->_imageView
:直接 ivar 访问。self.imageView
缩写[self imageView]
:使用访问器方法。在类实现中使用访问器具有以下优点:
atomic
属性,即使另一个线程同时使用 setter,也可以安全地使用返回值。copy
在分配给 ivars 时仍然很容易忘记声明copy
其值的属性。假设您没有覆盖访问器是安全的。例如,如果您提供替代行为-setImageView
,则ivar
直接调用 将跳过该行为。作为一般设计规则,我倾向于直接使用访问器方法而不是 ivar。在您确实覆盖访问器的情况下,它不太容易出现意外的副作用并且与继承相比更好。
It is sort of save but not good practice. You should use _imageView only in the setter and getter itself andn in init. Especially when you may whant to subclass your class later. The subclass may intentionally overwrite the getter and setter methods. In that case _imageView may not contain what you expect. Use self.imageView. That will invoke the accessors