1、assign :簡單賦值,不更改索引計數
2、retain:與strong相對應,使用了引用計數+1
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
7、weak:與assign 相對應
8、readonly:只有get方法,沒有set方法
9、readwrite://默認屬性
10、unsafe_unretained:用在ARC編譯環境下,在此環境下,與assign相似。它只是告訴ARC如何正確地調用聲明為unsafe_unretained變量的retain和release