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