Objective-C 屬性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)

 assign:指定setter方法用簡單的賦值,這是默認操作。你可以對標量類型(如int)使用這個屬性。你可以想象一個float,它不是一個對象,所以它不能retain、copy。

 

assign:簡單賦值,不更改索引計數(Reference Counting).使用assign: 對基礎數據類型 NSInteger)和C數據類型(int, float, double, char,等)

 

retain:指定retain應該在後面的對象上調用,前一個值發送一條release消息。你可以想象一個NSString實例,它是一個對象,而且你可能想要retain它。

 

 

retain:釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數爲1 ,使用retain 對其他NSObject和其子類 ,retain,是說明該屬性在賦值的時候,先release之前的值,然後再賦新值給屬性,引用再加1

 

 

copy:指定應該使用對象的副本(深度複製),前一個值發送一條release消息。基本上像retain,但是沒有增加引用計數,是分配一塊新的內存來放置它。copy是創建一個新對象,retain是創建一個指針,引用對象計數加1copy 建立一個索引計數爲1的對象,然後釋放舊對象,copy是創建一個新對象,retain是創建一個指針,引用對象計數加1

readonly:將只生成getter方法而不生成setter方法(getter方法沒有get前綴)。

readwrite:默認屬性,將生成不帶額外參數的getter和setter方法(setter方法只有一個參數)。

atomic:對於對象的默認屬性,就是setter/getter生成的方法是一個原子操作。如果有多個線程同時調用setter的話,不會出現某一個線程執行setter全部語句之前,另一個線程開始執行setter的情況,相關於方法頭尾加了鎖一樣。

nonatomic:不保證setter/getter的原子性,多線程情況下數據可能會有問題。nonatomic,非原子性訪問,不加同步,多線程併發訪問會提高性能。先釋放原先變量,再將新變量     retain然後賦值;

      注意,如果不加此屬性,則默認是兩個訪問方法都爲原子型事務訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章