iOS淺copy和深copy,以及nomatic,assign,strong,retain,weak

在iOS中我們定義屬性,一般會用到這些,但是具體的意義我們並不知道,這裏簡單介紹一下:

淺copy和深copy
注意:淺copy和深copy需要實現了NSCopying,NSMutableCopying,這樣纔可以調用copy和mutableCopy
(1)淺copy是複製了一個immutable的對象,而mutableCopy就是複製了一個mutable的對象
(2)淺copy是兩個對象指向的是同一區域,但深copy則是系統爲其分配了新的內存,但是其指向的內容是一樣的
(3)對一不可變對象複製,copy是指針複製,而mutableCopy就是對象複製。吐過是對可變對象複製,都是深拷貝,但是copy返回的對象是不可變的。

nomatic,assign,strong,retain,weak、copy
alloc對象分配後引用計數爲1
retain對象的引用計數+1
copy一個對象變成新的對象(新內存地址)引用計數爲1,原來對象引用計數不變
release對象引用計數-1,如果爲0釋放內存
autoRelease對象引用計數-1,如果爲0不馬上釋放,最近一個pool時釋放

assign相當於指針賦值,不對引用計數進行操作,注意原對象不用了,一定要把這個設置爲nil
retain釋放舊的對象,將舊對象的值賦予輸入對象,在提高輸入對象的引用計數爲1
copy其實是建立了一個相同的對象,而retain不是
copy到另外一個NSString之後,地址不同,內容相同,新的對象的引用計數爲1,舊對象沒有變化
retain到另外一個NSString之後,地址相同(建立一個指針,指針拷貝),內容當然相同,這個對象的引用計數+1
也就是說,retain是指針拷貝,copy是內容拷貝。

strong是用來修飾強引用的屬性
@property (strong)Class *obj;
對應原來的
@property (retain)Class *obj;
@property (copy)Class *obj;

weak用來修飾弱引用的屬性
@property (weak)Class *obj;
對應原來的
@property (assign)Class *obj;

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