簡體   English   中英

Objective-C中非合成屬性的弱/強注釋

[英]Weak/Strong Annotations for Non-Synthesized Properties in Objective-C

從Objective-C 2.0開始,我們有了一個屬性 ,一個很好的語法來獲取和設置實例變量的值。 由於Clang 3.1所有非動態的屬性,不具有顯式getter的readonly或沒有自定義getter和setter,都會自動合成到ivars。 而且,由於ARC,我們對屬性使用弱/強注釋 ,ARC使用這些屬性來定義自動合成屬性的內存管理邏輯

例如,屬性仍然可以手動合成例如用於由ivar支持的只讀屬性並返回默認值。

有時,如果它們根本不合成,那么它們也很有用。 當我使用這種行為時,我發現了一些用例:

  • 自定義getter和setter,它使用自定義ivar存儲實際值並執行一些其他操作。
  • 動態屬性,例如NSManagedObjectNSManagedObject
  • 一個只讀屬性,它只是通過存儲在另一個屬性(例如私有屬性)中的對象的屬性。

問題:根據實際使用情況,用弱/強注釋這些非合成屬性是否有意義? 什么是最佳做法?

https://twitter.com/kubanekl/status/427142577310408704

我會說答案是肯定的 ,即使只是為了記錄。

即使您不使用任何與編譯器和框架相關的默認實現,並自己實現所有內容,如果能夠獲得有關內存的提示,那么嘗試使用這些屬性的人將更好地理解API。管理會表現出來。 一個人並不真的必須知道如何在內部實現setter或getter,但他可能必須知道,例如,如果在調用setter之后,該值被復制或保留或僅被分配,並實現他的一面相應的事情。

是的,它確實。

屬性定義是合同規范。 僅僅因為編譯器沒有履行合同並不意味着你在手動實現訪問器方法時不應該尊重它。

暫無
暫無

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

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