深拷贝与浅拷贝
1、copy 后控制台打印的指针地址相同,是浅拷贝。
NSString *name1 = @"123"; NSString *name2 = [name1 copy]; NSLog(@"%p",name1); NSLog(@"%p",name2);2、mutableCopy 后控制台打印的指针地址不相同,是深拷贝。
NSString *name3 = @"dfs"; NSString *name4 = [name3 mutableCopy]; NSLog(@"%p",name3); NSLog(@"%p",name4);3、进过copy后对象是不可变的。运行会报错,因为向不可变数组array2中添加元素.
NSMutableArray *array1 = [NSMutableArray array]; // 用一个子类的指针指向父类的对象 (NSMutableArray 指针指向了NSArray) NSMutableArray *array2 = [array1 copy]; [array2 addObject:@"dfsa"]; NSLog:(@"%@",array1); NSLog:(@"%@",array2);4、经过mutableCopy后对象是可变的。
NSMutableArray *array = [NSMutableArray array]; NSMutableArray *array1 = [array mutableCopy]; [array1 addObject:@"fds"]; NSLog(@"%p",array); NSLog(@"%p",array1);5、自定义对象实现深拷贝。
自定义一个Student对象,在.h中遵守NSCopying协议 @interface Student : NSObject<NSCopying> 在.m中实现 下面方法 -(id)copyWithZone:(NSZone *)zone{}

浙公网安备 33010602011771号