簡體   English   中英

Objective-C使用合成值

[英]Objective-C using the synthesized value

假設我創建了一個自定義的UIView子類,它有一個名為imageView的屬性。 我已經合成了imageView ,如下所示:

@synthesize imageView = _imageView;

在我的所有自定義類方法中使用_imageView而不是self.imageView是否安全?

不,直接進入伊塔爾是不安全的。 只是為了說清楚:

  1. _imageViewself->_imageView簡稱self->_imageView _imageView :直接ivar訪問。
  2. self.imageView[self imageView] self.imageView [self imageView]縮寫:使用訪問器方法。

在類實現中使用訪問器具有以下優點:

  • 不會繞過覆蓋屬性訪問器的子類。
  • KVO合規性保持不變。
  • 對於atomic屬性,即使另一個線程同時使用setter,也可以安全地使用返回的值。
  • 正確處理對象所有權語義。 這在MRC(非ARC)下最重要,但即使在ARC下,當分配給聲明copy其值的屬性的ivars時,仍然很容易忘記copy

假設您沒有覆蓋訪問者,這是安全的。 例如,如果為-setImageView提供備用行為,則直接調用ivar將跳過該行為。 作為一般設計規則,我傾向於直接使用訪問器方法而不是ivar。 在您覆蓋訪問者的情況下,它不太容易出現意外的副作用,並且可以更好地繼承。

這是一種保存但不是很好的做法。 你應該只在setter中使用_imageView,在init中使用getter本身。 特別是當你以后想要繼承你的課時。 子類可能會故意覆蓋getter和setter方法。 在這種情況下,_imageView可能不包含您的期望。 使用self.imageView。 這將調用訪問者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM