1> 深拷贝就是如果执行拷贝时,只要有可变的无论是可变对象还是可变拷贝(mutableCopy) 2> 浅拷贝就是不可变对象执行的不可变拷贝 简单点说,只有源对象和副本对象都不可变才是浅拷贝,其他的都是深拷贝
深copy 和浅copy的区别是什么?1> 深拷贝:指针(地址拷贝),不会产生新的对象(不产生新的副本),拷贝的地址没有变化,引用计数+1 2> 浅拷贝:内容拷贝,会产生新对象(产生新的副本)
用-mutableCopy建立对象的可变副本(如果对象有“可变/不可变”版本的区别,才需要使用此方法) 1.copy与MutableCopycopy 返回一个不可变对象的副本,MutalbeCopy返回一个可变对象的副本。 NSArray *array=[NSArray arrayWithObjects:@"one",@"two", nil]; NSMutableArray *array1=[array copy]; [array1 addObject:@"three"]; //error NSMutableArray *array2=[array mutableCopy]; [array2 addObject:@"three"]; //right // insert code here... NSLog(@"Hello, World!"); 浅copy和深copy浅复制仅复制对象本身,对象里的属性、包含的对象不做复制 深复制复制全部,包括对象的属性和其他对象 Foundation框架支持复制的类,默认是浅复制 NSMutableArray *array=[[NSMutableArray alloc] init]; for(int i=0;i<3;i++){ NSObject *obj=[[NSObject alloc] init]; [array addObject:obj]; [obj release]; } for(NSObject *obj1 in array){ NSLog(@"地址为 %p,引用计数是 %ld",obj1,obj1.retainCount); } NSMutableArray *array2=[array copy]; for(NSObject *obj2 in array2){ NSLog(@"地址为 %p,引用计数是 %ld",obj2,obj2.retainCount); } 输出:2013-09-30 17:28:01.492 FDAS[681:303] 地址为 0x1001081f0,引用计数是 1 2013-09-30 17:28:01.506 FDAS[681:303] 地址为 0x100108230,引用计数是 1 2013-09-30 17:28:01.506 FDAS[681:303] 地址为 0x100108240,引用计数是 1 2013-09-30 17:28:01.507 FDAS[681:303] 地址为 0x1001081f0,引用计数是 2 2013-09-30 17:28:01.507 FDAS[681:303] 地址为 0x100108230,引用计数是 2 2013-09-30 17:28:01.507 FDAS[681:303] 地址为 0x100108240,引用计数是 2(责任编辑:最模板) |