iOS 深 淺複製及完全深複製

2021-09-30 01:40:05 字數 1160 閱讀 4462

進行容器類完全深複製的2種方法

歸檔淺拷貝獲得的物件的位址和原有物件的位址一致

而深拷貝返回新的記憶體位址,並且返回的物件為可變物件

1、非容器 + 不可變物件(nsstring) + retain + copy + mutablecopy

2、非容器 + 可變物件(nsmutablestring) + retain + copy + mutablecopy

3、容器類 + 非可變物件 + retain + copy + mutablecopy

4、容器類 + 可變物件 + retain + copy + mutablecopy1、用 initwitharray:copyitems: 將第二個引數設定為yes即可深複製

nsdictionary shallowcopydict =

[[nsdictionary alloc] initwithdictionary:somedictionary copyitems:yes]

;

這樣就可以把dataarray1的內容完全深複製到dataarray2中了。

2、使用基礎框架的歸檔功能:

dataarray2 =

[nskeyedunarchiver unarchiveobjectwithdata:

[nskeyedarchiver archiveddatawithrootobject: dataarray1]

]

既然接觸到歸檔,就簡單了解下歸檔吧。

歸檔是指,在字典,陣列,自定義的物件等需要儲存時,轉換為位元組流nsdata型別資料,再通過寫入檔案來進行儲存。

因此,歸檔常用於離線快取,將有網時的資料存放在本地;也可以快取使用者搜尋歷史記錄。

歸檔的**:

nskeyedarchiver *archvier =

[[nskeyedarchiver alloc] initforwritingwithmutabledata:data]

;

這裡的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 如果欄位是值型別的。則對該字段執行逐位複製,如果欄位是引用型別,則複製引用但不複製引用的物件 因此,原始物件及其副本引用同一物件。即被複製物件的所有變數都含有...