進行容器類完全深複製的2種方法
歸檔淺拷貝獲得的物件的位址和原有物件的位址一致
而深拷貝返回新的記憶體位址,並且返回的物件為可變物件
1、非容器 + 不可變物件(nsstring) + retain + copy + mutablecopy
2、非容器 + 可變物件(nsmutablestring) + retain + copy + mutablecopy
3、容器類 + 非可變物件 + retain + copy + mutablecopy
4、容器類 + 可變物件 + retain + copy + mutablecopy1、用 initwitharray:copyitems: 將第二個引數設定為yes即可深複製
這樣就可以把dataarray1的內容完全深複製到dataarray2中了。nsdictionary shallowcopydict =
[[nsdictionary alloc] initwithdictionary:somedictionary copyitems:yes]
;
2、使用基礎框架的歸檔功能:
既然接觸到歸檔,就簡單了解下歸檔吧。dataarray2 =
[nskeyedunarchiver unarchiveobjectwithdata:
[nskeyedarchiver archiveddatawithrootobject: dataarray1]
]
歸檔是指,在字典,陣列,自定義的物件等需要儲存時,轉換為位元組流nsdata型別資料,再通過寫入檔案來進行儲存。
因此,歸檔常用於離線快取,將有網時的資料存放在本地;也可以快取使用者搜尋歷史記錄。
歸檔的**:
這裡的data就是要轉成位元組流的物件。nskeyedarchiver *archvier =
[[nskeyedarchiver alloc] initforwritingwithmutabledata:data]
;
相對應的解檔:
感覺平時用不太到,也沒深入了解。[nskeyedunarchiver unarchiveobjectwithdata:archvier]
;
iOS深複製和淺複製
淺複製示例 nsmutablearray marray nsmutablearray arraywithobjects nsmutablestring stringwithstring origiona nsmutablestring stringwithstring origionb nsmuta...
iOS 深複製和淺複製
一 copy與retain的區別 1 copy是建立乙個新物件,retain是建立乙個指標,引用物件計數加一。2 copy屬性表示兩個物件內容相同,新的物件retain為1,與舊有的物件的引用計數無關,舊有物件沒有改變。copy減少物件對上下文的依賴。3 retain屬性表示兩個物件位址相同 建立乙...
淺複製 深複製
second,來說說shallow copy and deep copy的定義和我自己的一些理解。僅供參考 淺複製 shallow copy 如果欄位是值型別的。則對該字段執行逐位複製,如果欄位是引用型別,則複製引用但不複製引用的物件 因此,原始物件及其副本引用同一物件。即被複製物件的所有變數都含有...