先定义几个temp数组
///-------------------------------
/// @name 首先看 NSArry中关于 strong 和 copy 的区别
///-------------------------------
NSArray *tempArry = [NSArray arrayWithObjects:@"1", @"2", nil]; //0x60800003b080
NSArray *tempArry2 = [NSArray arrayWithObjects:@"3", @"4", nil]; //0x60800003dae0
NSArray *tempArry3 = [[NSArray alloc] initWithObjects:@"10", @"100", nil];
NSMutableArray *tempMutableArry = [NSMutableArray arrayWithObjects:@"5", @"6", nil];
</br>
对 ( copy*) NSArry = NSMutableArry进行测试
///-------------------------------
/// @name NSArry copy NSMutablerry
///-------------------------------
tempMutableArry数组指向地址: 0x60000004e760 , 数组地址:0x7fff529eda68
//cArry 数组指向地址: 0x600000221fc0 , 数组地址:0x7fff529ed970
//cArry 数组元素:5
//cArry 数组元素:6
self.cArry = tempMutableArry;
#等价于 self.cArry = [tempMutableArry copy];
//cArry 数组指向地址: 0x600000221fc0 , 数组地址:0x7fff529ed970
//cArry 数组元素:5
//cArry 数组元素:6
tempMutableArry[1] = @"123";
</br>
总结
OC 语言的深拷贝和浅拷贝的区别:有没有产生新对象,即开辟新的内存。
- 深拷贝,产生新的对象,开辟新的内存空间
浅拷贝,不产生新的对象,不开辟新的内存空间,只是把指针指向原来对象的内存地址。
拷贝的目的是产生两个互不影响的对象,所以:
- 对不可变对象来说,由于对象本身不可以进行修改,即不能对它产生影响。所以不可变对象的 copy 都是浅拷贝。
- 不可变对象的 mutableCopy 是深拷贝。
- 可变对象的 copy 是深拷贝。
- 可变对象的 mutableCopy 是深拷贝。
- 把一个NSMutableString变量mutableString赋值给一个copy修饰的NSSrting属性string( self.string = mutableString;), 等价于self.string = [mutableString copy];
</br>