copy / MutableCopy 认识 以及 数组/字典对对象的引用

(1)对一个不可变的对象,进行copy操作,浅拷贝,造成对象的retainCount + 1

(2)对一个不可变对象,进行MutableCopy操作,深拷贝,会创建出一个新的对象,之后两个对象发生改变,互不影响

(3)对可变对象进行copy,深拷贝,新创建了一个不可变的对象,原对象的retainCount不变,拷贝得到的新对象时一个不可变的对象

(4)对可变对象进行MutableCopy,深拷贝,原对象的retainCount不变,拷贝得到的新对象是一个可变的对象


针对第一种情况:

NSArray * array = [[NSArray alloc]initWithObjects:@"234", nil];

NSArray *array1 = [array copy];

NSLog(@"array = %p retainCount = %ld  array1 = %p retainCount1 = %ld",array,array.retainCount,array1,array1.retainCount);

针对第二种情况:

NSArray * array = [[NSArray alloc]initWithObjects:@"234", nil];

NSMutableArray * array2 = [array mutableCopy];

NSLog(@"array = %p retainCount = %ld  array2 = %p retainCount2 = %ld",array,array.retainCount,array2,array2.retainCount);

[array2 addObject:@"656"];

NSLog(@"array = %@  array2 = %@",array,array2);

针对第三种情况:

NSMutableArray * array3 = [[NSMutableArray alloc]initWithObjects:@"fdjb", nil];

NSArray *array4 = [array3 copy];

NSLog(@"array3 = %p retainCount3 = %ld  array4 = %p retainCount4 = %ld",array3,array3.retainCount,array4,array4.retainCount);

针对第四种情况:

NSMutableArray * array3 = [[NSMutableArray alloc]initWithObjects:@"fdjb", nil];

NSMutableArray *array5 = [array3 mutableCopy];

NSLog(@"array3 = %p retainCount3 = %ld  array5 = %p retainCount5 = %ld",array3,array3.retainCount,array5,array5.retainCount);


总结:

MutableCop 一定是深拷贝, copy 不一定是浅拷贝如果copy拷贝的对象是可变的对象则是深拷贝.


数组/字典对对象的应用

(1)向数组中添加对象时,对象的retainCount 会 + 1,数组会持有这个对象

(2)从数组中移除对象,对象的retianCount - 1

字典同理

你可能感兴趣的:(copy / MutableCopy 认识 以及 数组/字典对对象的引用)