淺拷貝 深拷貝

2021-06-25 13:42:41 字數 1033 閱讀 3235

copy、mutablecopy

copy:不管是可變的,還是不可變的,結果都是不可變的

mutablecopy:不管是不可變的,還是可變的,結果都是可變的

nsmutablestring*str = [nsmutablestring

stringwithformat

:@"a"];

nsarray *arr1 = @[str,@"b"

];nsarray *arr2 = [arr1 copy];  

[str setstring:@"c"];

nslog(@"%@",arr2);   

//自定義的類需要實現copy的話,需要遵守協議nscopying

@inte***ce

useritem : nsobject

@property(nonatomic,retain)

nsmutablestring

*name;

@end

@implementationuseritem

//系統沒事呼叫alloc,就相當於呼叫了allocwithzone

//系統每次呼叫copy的話,就相當於呼叫了copywithzone

-(id)copywithzone:(nszone *)zone

//深拷貝

-(id)mutablecopywithzone:(nszone *)zone

@end 

useritem *user = [[useritem

alloc] init];

user.name = [nsmutablestring

stringwithformat:@"

潘松彪"];

//    useritem *user2 = [user copy];    //淺拷貝

//    [user.name setstring:@"李力卓」];   

useritem *user3 = [user mutablecopy];  //深拷貝

nslog(@"%@",user3.name);

深拷貝 淺拷貝

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝 深拷貝

retain是建立乙個指標,引用物件計數加1。copy屬性表示兩個物件內容相同,新的物件retain為1 與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,re...

深拷貝, 淺拷貝

nsstring copy 指標複製,返回的物件的位址和方法的接收者一樣,引用計數加1 nsmutablestring copy 深複製,重新alloc乙個 nsstring 的物件,並返回。返回物件的位址和方法接收者的位址不一樣,並且方法接受者的內容改變不影響返回物件,同時返回物件的內容不可以改變...