簡而言之:
1、對不可變的非集合物件,copy是指標拷貝,mutablecopy是內容拷貝
2、對於可變的非集合物件,copy,mutablecopy都是內容拷貝
3、對不可變的陣列、字典、集合等集合類物件,copy是指標拷貝,mutablecopy是內容拷貝
4、對於可變的陣列、字典、集合等集合類物件,copy,mutablecopy都是內容拷貝
但是,對於集合物件的內容複製僅僅是對物件本身,但是物件的裡面的元素還是指標複製。要想複製整個集合物件,就要用集合深複製的方法,有兩種:
(1)使用initwitharray:copyitems:方法,將第二個引數設定為yes即可
nsdictionary shallowcopydict = [[nsdictionary alloc] initwithdictionary:somedictionary copyitems:yes];
(2)將集合物件進行歸檔(archive)然後解歸檔(unarchive):
nsarray *truedeepcopyarray = [nskeyedunarchiver unarchiveobjectwithdata:[nskeyedarchiver archiveddatawithrootobject:oldarray]];
iOS深拷貝與淺拷貝
在大部分的程式語言中,都有深拷貝與淺拷貝的概念,如果使用深淺拷貝有誤,可能會造成資料安全性的問題,那麼本節針對oc中的深淺拷貝展開討論 深拷貝與淺拷貝的概念 我們在進行例項物件操作時,無非是兩種例項方式 建立新物件後將原物件的內容拷貝乙份,而後返回該物件引用 深淺拷貝的區別由此產生 以下是b物件拷貝...
IOS中的深拷貝與淺拷貝
簡單的來說就是,在有指標的情況下,淺拷貝只是增加了乙個指標指向已經存在的記憶體,而深拷貝就是增加乙個指標並且申請乙個新的記憶體,使這個增加的指標指向這個新的記憶體,採用深拷貝的情況下,釋放記憶體的時候就不會出現在淺拷貝時重複釋放同一記憶體的錯誤!我列舉乙個例子來說吧 你正在編寫c 程式中有時用到,操...
iOS偽拷貝, 淺拷貝, 深拷貝
先來說說偽拷貝。偽拷貝就是生成了乙個指標變數,指向了某乙個物件。接下來我們來 下淺拷貝和深拷貝。首先,從copy開始說,簡而言之,copy的目的就是生成乙個新的例項,然後把其成員都按原例項賦值。對於非指標型的成員,比如bool,int,float,這樣的賦值可以直接進行。但是對於指標型的資料,比如o...