深拷贝与浅拷贝

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{}
posted @ 2016-04-22 11:00  iOS赵师顺  阅读(96)  评论(0)    收藏  举报