![](/img/trans.png)
[英]Can I validate a @property value in Objective-C using @synthesized methods?
[英]Objective-C using the synthesized value
假设我创建了一个自定义的UIView
子类,它有一个名为imageView
的属性。 我已经合成了imageView
,如下所示:
@synthesize imageView = _imageView;
在我的所有自定义类方法中使用_imageView
而不是self.imageView
是否安全?
不,直接进入伊塔尔是不安全的。 只是为了说清楚:
_imageView
是self->_imageView
简称self->_imageView
_imageView
:直接ivar访问。 self.imageView
是[self imageView]
self.imageView
[self imageView]
缩写:使用访问器方法。 在类实现中使用访问器具有以下优点:
atomic
属性,即使另一个线程同时使用setter,也可以安全地使用返回的值。 copy
其值的属性的ivars时,仍然很容易忘记copy
。 假设您没有覆盖访问者,这是安全的。 例如,如果为-setImageView
提供备用行为,则直接调用ivar
将跳过该行为。 作为一般设计规则,我倾向于直接使用访问器方法而不是ivar。 在您覆盖访问者的情况下,它不太容易出现意外的副作用,并且可以更好地继承。
这是一种保存但不是很好的做法。 你应该只在setter中使用_imageView,在init中使用getter本身。 特别是当你以后想要继承你的课时。 子类可能会故意覆盖getter和setter方法。 在这种情况下,_imageView可能不包含您的期望。 使用self.imageView。 这将调用访问者
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.