物件的深淺拷貝

2021-09-28 08:32:29 字數 1178 閱讀 4610

#import "dsjcopyctrl.h"

@inte***ce dsjcopyctrl ()

@end

@implementation dsjcopyctrl

- (void)viewdidload

- (void)strcopy

- (void)arrcopy

- (void)diccopy ;//0x2810955e0 nssingleentrydictionaryi

nsdictionary *dic1 = dic.copy;//0x2810955e0 nssingleentrydictionaryi

nsdictionary *dic2 = dic.mutablecopy;//0x2810943e0 nsdictionarym

[((nsmutabledictionary *)dic2) setobject:@"dsj" forkey:@"name"];

nslog(@"dic:%p dic1:%p dic2:%p",dic,dic1,dic2);

nsmutabledictionary *dic3 = [nsmutabledictionary dictionarywithdictionary:@];// 0x28109b0c0 nsdictionarym

nsmutabledictionary *dic4 = dic3.copy; //0x28109bb80 nsfrozendictionarym

//fixme:- [dic4 setobject:@"dsj" forkey:@"name"];//會奔潰

/**/

nsmutabledictionary *dic5 = dic3.mutablecopy;//0x28109ba80 nsdictionarym

nslog(@"dic3:%p dic4:%p dic5:%p",dic3,dic4,dic5);

}- (void)setcopy

@end

結論:

1.淺拷貝是指標拷貝,不產生新物件。

2.深拷貝是物件拷貝,開闢了新空間,產生新物件。

3.copy 不一定是淺拷貝,物件進行copy後一定不可變。

4.mutablecopy 一定是深拷貝 。

5.可變型別進行拷貝一定產生新物件 。

物件的深淺拷貝

object.assgin 會合併乙個物件生成乙個新物件。如果物件是普通型別改變之後新物件不會改變,如果是引用型別改變後新物件也會改變,所以obeject.assgin實際上還是淺拷貝。var obj var newobj object.assgin obj obj.aa 2 obj.bb.item...

物件的深淺拷貝

理解 一,物件的淺拷貝 1.0 簡單的賦值 2.0 object.assign object.assign 方法可以把任意多個的源物件自身的可列舉屬性拷貝給目標物件,然後返回目標物件。但是 object.assign 進行的是淺拷貝,拷貝的是物件的屬性的引用,而不是物件本身 二,物件的深拷貝 1.0...

陣列和物件的深淺拷貝

深拷貝淺拷貝和賦值 如何實現淺拷貝 物件function shallowcopy src for var prop in src return dst 注釋 hasownproperty 方法會返回乙個布林值,這個方法可以用來檢測乙個物件是否含有特定的自身 非繼承 屬性。for in 迴圈只會遍歷可...