iOS應用開發:ARC之@property使用

來源:互聯網
上載者:User

所有者屬性

我們先來看看與所有權有關係的屬性,關鍵字間的對應關係。

屬性值 關鍵字 所有權
strong __strong
weak __weak
unsafe_unretained __unsafe_unretained
copy __strong
assign __unsafe_unretained
retain __strong

strong

該屬性值對應 __strong 關鍵字,即該屬性所聲明的變數將成為對象的持有人。

weak

該屬性對應 __weak 關鍵字,與 __weak 定義的變數一致,該屬性所聲明的變數將沒有對象的所有權,並且當對象被破棄之後,對象將被自動賦值nil。

並且,delegate 和 Outlet 應該用 weak 屬性來聲明。同時,如上一回介紹的 iOS 5 之前的版本是沒有 __weak 關鍵字的,所以 weak 屬性是不能使用的。這種情況我們使用 unsafe_unretained。

unsafe_unretained

等效於__unsafe_unretaind關鍵字聲明的變數;像上面說明的,iOS 5之前的系統用該屬性代替 weak 來使用。

copy

與 strong 的區別是聲明變數是拷貝對象的持有人。

assign

一般Scalar Varible用該屬性聲明,比如,int, BOOL。

retain

該屬性與 strong 一致;只是可讀性更強一些。

讀寫相關的屬性 (readwrite, readonly)

讀寫相關的屬性有 readwrite 和 readonly 兩種,如果使用ARC之後,我麼需要注意一下 readonly 屬性的使用。

比如下面的變數聲明。

 
  1. @property (nonatomic, readonly) NSString *name;  

一般聲明為 readonly 的變數按理說應該不需要持有所有權了,但是在ARC有效情況下,將出現下面的錯誤資訊 :

 “ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute
如果定義了ARC有效,那麼必須要有所有者屬性的定義;所以我們的代碼改成這樣,就OK了

 
  1. @property (nonatomic, strong, readonly) NSString *name; 

不過有一點,Scalar Varible的變數預設都有 assign 的屬性定義,所以不需要給他們單獨的明示聲明了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.