Objective-C中@property的所有屬性詳解

來源:互聯網
上載者:User

1,assign :

簡單賦值,不更改索引計數

假設你用malloc分配了一塊記憶體,並且把它的地址賦值給了指標a,後來你希望指標b也共用這塊記憶體,於是你又把a賦值給(assign)了b。此時a 和b指向同一塊記憶體,請問當a不再需要這塊記憶體,能否直接釋放它?答案是否定的,因為a並不知道b是否還在使用這塊記憶體,如果a釋放了,那麼b在使用這塊記憶體的時候會引起程式crash掉

 

應用場合:

對基礎資料類型 (例如NSInteger,CGFloat)和C資料類型(int, float, double, char, 等)      

適用單一資料型別

2,retain:

與strong相對應,使用了引用計數,retain+,release -;當引用 計數為0時,dealloc會被調用,記憶體被釋放

 

3,copy:

用於非共用記憶體時,每個指標有自己的記憶體空間

 

4,atomic//預設屬性

/

 

 5,nonatomic


 

總結:atomic和nonatomic用來決定編譯器產生的getter和setter是否為原子操作。在多線程環境下,原子操作是必要的,否則有可能引起錯誤的結果。加了atomic,setter函數會變成下面這樣:


 (property !==

 

6,strong://ARC中預設屬性,等於非ARC中的retain

與retain相對應,

應用情境:

strong屬性用於ARC中

@property (strong,nonatomic) ViewController *viewController;

 

7,weak:

與assign 相對應,

應用情境:

用於IBOutlets,如,UIViewController的子類,即一般的控制項。

@property (weak, nonatomic) IBOutlet UIButton *myButton;

 

strong與weak的區別舉例:

前提:

我們把要用strong或者weak的對象比作一隻風箏,風箏想掙脫線的束縛,自由飛翔去,如果此時有一根線,那麼這隻風箏就掙脫不了

 

過程分析


 

8,readonly

只有get方法,沒有set方法

9,readwrite//預設屬性

有get/set方法

10,unsafe_unretauined

用在ARC編譯環境下,在此環境下,與assign相似。它只是告訴ARC如何正確地調用聲明為unsafe_unretauined變數的retain和release

相關文章

聯繫我們

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