深淺複製 2

2021-07-29 13:57:57 字數 1015 閱讀 6404

前面講了深淺複製的概念,而實操中我們會遇到更多的情況

我們可以看到這兩個copywithzone方法在arc下已經是放棄了,這兩個方法的使用非常簡單,一般的格式如下:

1.實現nscopying協議

2.實現copywithzone方法:

3.呼叫:

我們看看結果:

結果非常明顯了,這類似於上篇所講的情況,所裝載的容器發生了深拷貝,但是裡面的內容並沒有發生什麼變化(指向的同乙個指標,淺複製)

如果我們需要實現真正的深複製,我們就要在實現裡面也要用copy或者mutacopy

對於自定義的物件,我們如果沒有實現copywithzone方法就使用copy方法,會導致奔潰,同樣道理,也要小心屬性中的copy關鍵字,

因為這個copy關鍵字就是去將它呼叫copy方法

還有乙個方法特別要小心:

- (instancetype)initwitharray:(nsarray*)array copyitems:(bool)flag;
這個方法相當於幫你一次解決,如果設定no,則陣列「容器」是深複製,而如果設定yes,則是完完全全的深複製,容器陣列本身和容器內的物件都是屬於深拷貝的新物件。

如果設定yes,同樣地如果你不實現copywithzone,會奔潰。因為它原因就是用copy~

oc 深淺複製

淺 復 制 在複製操作時,對於被複製的物件的每一層複製都是指標複製。深 復 制 在複製操作時,對於被複製的物件至少有一層複製是物件複製。完全複製 在複製操作時,對於被複製的物件的每一層複製都是物件複製。注 1 在複製操作時,對於物件有n層是物件複製,我們可稱作n級深複製,此處n應大於等於1。2 對於...

Python 深淺複製

python中的賦值語句不複製物件,它們在目標和物件之間建立繫結。對於可變的或包含可變項的容器,有時需要乙個副本,所以可以改變乙個副本而不改變另乙個。將建立乙個新物件,但它包含的是對原始物件包含的項的引用。a b list a c a.copy d copy.copy a 建立乙個新物件,並且遞迴的...

List 深淺複製

前幾天做專案 因為list深淺複製的事兒 鼓搗了半天 原來是有這個概念的 因為自己用的不是很多 寫起來一時寫的順手 就沒有可以的去寫 結果就出問題了 直接寫出來經歷 防止以後犯渾 第一次這樣寫的 源list listsourselist new arraylist 複製體list listcopyl...