Property有很多的屬性,總結一下都是幹什麼用的
1.和多線程相關的參數:
atomic:原子性,多線程環境下訪問屬性是安全的,生成的getter和setter方法中加入了局部鎖,在執行過程中不可被打斷,但是對效率有影響,如果不寫系統默認爲atomic;
nonatomic:非原子性,生成的getter和setter方法沒有局部鎖,但在多線程環境下訪問屬性容易造成數據丟失,效率比atomic要高,因此,在使用頻繁且不用考慮多線程競爭的情況下儘量用nonatomic;
2.生成setter方法相關參數:
assign:用assign生成的setter方法直接對對象賦值,系統默認情況下爲assign;
retain:生成的setter是標準的MRC管理代碼,先判斷,然後release,再retain;
copy:複製對象,通常用於保證字符串安全,其setter方法中先判斷,然後release,再copy;
詳細內容請參考http://blog.csdn.net/xgcyangguang/article/details/51177906
3.讀寫屬性:
readonly:只讀屬性,只生成getter方法沒有setter方法,不希望屬性被修改的時候使用;
readwrite:讀寫屬性,系統默認,同時生成getter方法和setter方法;
4.強弱引用屬性:
strong:強引用,只能用在ARC模式下,作用同retain一樣;
weak:弱引用,同樣只能用於ARC模式,對象在沒有引用的時候會及時回收,也可避免造成循環引用
詳細內容請參考http://blog.csdn.net/xgcyangguang/article/details/51096498
5.總結:
(1)在平時的開發中,一般情況下UI控件都用weak;
(2)NSString類型的都用copy;
(3)屬性的類型是OC對象的用retain;屬性類型是非OC對象的用assign;
(4)對象都用strong;
(5)出現兩個屬性相互引用的時候一定要一個strong一個weak;
歡迎大家積極補充指正!