nonatomic,assign,copy,retain的區別

nonatomic:非原子性訪問,不加同步,多線程併發訪問會提高性能。如果不加此屬性,則默認是兩個訪問方法都爲原子型事務訪問。
                    (atomic是Objc使用的一種線程保護技術,基本上來講,是防止在寫未完成的時候被另外一個線程讀取,造成數據錯誤。而這種機制是耗費系統資源的,所 以在iPhone這種小型設備上,如果沒有使用多線程間的通訊編程,那麼nonatomic是一個非常好的選擇。)

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

copy:建立一個索引計數爲1的對象,然後釋放舊對象  
            對NSString 

retain:釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數爲1
             對其他NSObject和其子類

ios5以後,使用strong替代retain關鍵字,表示對於對象的強持有,在被其他賦值操作釋放後,該對象仍然不能被釋放,知道其索引計數爲0

相對應的是weak,一旦有對象將其置nil,則通知所有指向該內存地址的引用其被置空!!

copy與retain的區別:
copy是創建一個新對象,retain是創建一個指針,引用對象計數加1。
eg:   一個NSString 對象,地址爲0×1111 ,內容爲@”STR”

 

Copy 到另外一個NSString 之後,地址爲0×2222 ,內容相同,新的對象retain爲1 ,舊有對象沒有變化

retain 到另外一個NSString 之後,地址相同(建立一個指針,指針拷貝),內容當然相同,這個對象的retain值+1

也就是說,retain 是指針拷貝,copy 是內容拷貝。

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