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+1,release -1;當引用 計數為0時,dealloc會被調用,記憶體被釋放 3. copy: 用於非共用記憶體時, 每個指標有自己的記憶體空間 4. atomic: //預設屬性 A. 當一個變數聲明為atomic時,意味著 在多執行緒中只能有一個執行緒能對它進行訪問 B. 當一個變數聲明為atomic時,該變數為執行緒安全型,但是 會影響存取速度 , C. 當一個變數聲明為atomic時,在 非ARC編譯環境下,需要設置訪問鎖來保證對該變數進行正確的get/set 5. nonatomic: A. 當一個變數聲明為nonatomic時,意味著 多個執行緒可以同時對其進行訪問 B. 當一個變數聲明為nonatomic時,它是 非執行緒安全型,存取速度快 ; C. 當一個變數聲明為nonatomic時, 當兩個不同的執行緒對其訪問時,容易失控。 總結:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。在多執行緒環境下,原子操作是必要的,否則有可能引起錯誤的結果。加了atomic,setter函數會變成下面這樣: if (property != newValue) { [property release]; property = [newValue retain]; } 6. strong: //ARC中預設屬性,等於非ARC中的retain 與retain相對應, 應用場景: strong屬性用於ARC中 @...