深拷贝与浅拷贝

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{}


你可能感兴趣的:(浅拷贝,深拷贝,拷贝,自定类拷贝)