深複製與淺複製的理解

2021-07-23 14:54:59 字數 1066 閱讀 7068

-,淺複製,當我們用copy方法拷貝不可變物件,或者mutablecpoy拷貝可變物件時,為新物件分配了記憶體空間,物件預設為淺複製,只是複製了指標位址,所有兩者還是指向同乙個物件,當乙個物件值改變時,另乙個物件的值會跟著改變。

二,深複製,為原物件複製乙份一模一樣的新物件,並且相互之前沒有影響,

要用到nscopying協議和nsmutablecopying協議

nscopying協議:

- (id)copywithzone:(

nullable

nszone

*)zone;

nsmutablecopying:

- (id)mutablecopywithzone:(

nullable

nszone

*)zone;

分別用來實現不可變物件的拷貝和可變物件的拷貝,要實現自己類的拷貝就要實現協議的方法

@inte***ce

person

()<

nscopying

,nsmutablecopying

>

#pragma mark---nscopying -(

id)copywithzone:(

nszone

*)zone

#pragma mark--nsmutablecopying

- (id)mutablecopywithzone:(

nullable

nszone

*)zone

使用:

person

*per = [[

person

alloc

] init];

per.

name

= @"zhangsan";

per.

age= 12;

person

*new = [per

copy];

new.

name

= @"lisi";

new.

age= 13;

per和new占有不同的記憶體空間,相互沒有影響。

淺複製與深複製

舉個複製 的例子 function clone p,s for var prop in p return s var a var b clone a,b b.hobby 1 reading b.hobby 1 reading c.hobby 1 reading 由上面的例子可以看出,當執行淺複製時,...

深複製與淺複製

2者主要區別 是否為成員變數分配新記憶體空間 複製建構函式有2種 深複製與淺複製 當將乙個物件a複製給另乙個物件b時,系統會呼叫複製建構函式 編譯器預設的複製建構函式是淺拷貝,它將原物件的每乙個成員變數複製到新物件的成員變數中去。因而最後兩個物件的變數均指向相同的資料成員的記憶體位址。當資料成員中沒...

淺複製與深複製

1.淺複製 被複製物件的所有變數都含有與原來的物件相同的值,而其所有的對其他物件的引用都仍然指向原來的物件。說明 乙個物件中的資料成員 include using namespace std class test test const test c 複製建構函式,提供乙個同型別物件作為引數 void...