浅析OC中的copy、mutableCopy

关于OC中的copy、mutableCopy看过别人写的很多文章,平时工作中也经常用,但并没有验证过,今天来验证下。

1、NSString: Copy、mutableCopy

浅析OC中的copy、mutableCopy_第1张图片

通过控制台打印的信息,可以看出:copy后的地址与原地址是同一个地址,类型也是同一种类型__NSCFConstantString,是浅拷贝。mutableCopy后的地址与原地址不是同一个,类型为__NSCFString,与原类型__NSCFConstantString不一样,是深拷贝。

2、NSMutableString: Copy、mutableCopy

浅析OC中的copy、mutableCopy_第2张图片

NSMutableString copy、mutableCopy后的地址与原地址均不同,均为深拷贝。copy后的类型为__NSCFConstantString,不可变字符串,mutableCopy后的类型与原类型均为__NSCFString,是可变字符串。

3、NSArray:Copy、mutableCopy

浅析OC中的copy、mutableCopy_第3张图片

NSArray copy后的地址与原地址是同一个地址,类型也是同一种类型__NSArray0,是浅拷贝。mutableCopy后的地址与原地址不是同一个,类型为__NSArrayM,与原类型__NSArray0不一样,是深拷贝。

4、NSMutableArray:Copy、mutableCopy

浅析OC中的copy、mutableCopy_第4张图片

NSMutableArray copy、mutableCopy后的地址与原地址均不同,均为深拷贝。copy后的类型为__NSArray0,是不可变数组。mutableCopy后的类型与原类型均为__NSArrayM,均为可变数组。

5、NSDictionary:Copy、mutableCopy


浅析OC中的copy、mutableCopy_第5张图片

NSDictionary copy后的地址与原地址是同一个地址,类型也是同一种类型__NSDictionary0,是浅拷贝。mutableCopy后的地址与原地址不是同一个,类型为__NSDictionaryM,与原类型__NSDictionary0,也不一样,是深拷贝。

6、NSMutableDictionary:Copy、mutableCopy


浅析OC中的copy、mutableCopy_第6张图片

NSMutableDictionary copy、mutableCopy后的地址与原地址均不同,均为深拷贝。copy后的类型为__NSFrozenDictionaryM,不可变字典,mutableCopy后的类型与原类型均为__NSDictionaryM,均为可变字典。

结论: 

1、不可变对象:copy,是浅拷贝;mutableCopy,是深拷贝,生成的对象是可变的。

 2、可变对象: copy,是深拷贝,生成的对象是不可变的;mutableCopy,是深拷贝,生成的对象是可变的。

详见Demo

你可能感兴趣的:(浅析OC中的copy、mutableCopy)