Objective-c @property小記

來源:互聯網
上載者:User

strong與weak是由ARC新引入的物件變數屬性。weak 和 strong 屬性只有在你開啟ARC時才會被要求使用。

@strong 和@retain相近

@weak和@assign相近,不過@weak在釋放後多做了賦值為nil操作,這種好處是防止野指標搗亂,其好處,用過的人都知道。

@copy 此屬性只對那些實行了NSCopying協議的物件類型有效。如同深拷貝的意思,開闢出新的記憶體空間,複製內容進記憶體  中,這樣有兩份對象,然後各不相干。

@retain 引用計數加1,讓指標指向已有的記憶體位址,這樣,retain出來的指標指向的地址和原地址相同,提高了引用計數,實際記憶體位址中只有一份資料。採用引用計數的方法

簡單的一句話,@copy深拷貝 @retain淺拷貝

@assign 簡單賦值,不更改索引計數
對基礎資料類型 (例如NSInteger,CGFloat)和C資料類型(int, float, double, char, 等) 適用單一資料型別。特別地,在Objective-c中的delegate的屬性必須設定為@assign (iOS5用@weak) ,其目的是防止循環參考導致的記憶體無法釋放而產生的記憶體泄露。

比如,你用malloc分配了一塊記憶體,並且把它的地址賦值給了指標a,後來你希望指標b也共用這塊記憶體,於是你又把a賦值給(assign)了b。此時a和b指向同一塊記憶體。a不再需要這塊記憶體,能否直接釋放它。如果是@retain 屬性,則通過引用計數的辦法管理記憶體,當引用計數為0 時候釋放,而 用@assign則不能直接釋放a,因為不知道b是否還在用記憶體中的東西,極度危險的操作。

@readonly  唯讀屬性。如果你使用@synthesize關鍵字,也是有讀取器方法(get)被解析。而且如果你試圖使用點操作符為屬性賦值,你將得到一個編譯錯誤。

@readwrite此標記說明屬性會被當成讀寫的,這也是預設屬性

__weak, __strong 用來修飾變數,此外還有 __unsafe_unretained, __autoreleasing 都是用來修飾變數的。
__strong 是預設的關鍵詞。
__weak 聲明了一個可以自動 nil 化的弱引用。
__unsafe_unretained 聲明一個弱應用,但是不會自動nil化,也就是說,如果所指向的記憶體地區被釋放了,這個指標就是一個野指標了。
__autoreleasing 用來修飾一個函數的參數,這個參數會在函數返回的時候被自動釋放。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.