[英]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.