OC中的深浅拷贝(copy, MutableCopy)

て烟熏妆下的殇ゞ 提交于 2019-12-07 19:13:25
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //------------------不可变的对象-------------------
        //创建一个字符串型a
        NSString *a = @"abcdefg";
        //浅拷贝a,只是引用了一下,打印出来地址是一样的
        //这里如果把浅拷贝出来的a1的值改变了,源a是不会跟着变的,a1会自动生成一个新的对象,和a是不同的地址
        NSString *a1 = [a copy];
        //深拷贝a,直接克隆了一下,打印出来是不同的地址
        NSString *a2 = [a mutableCopy];
        
        //打印a,a1,a2的值,比较一下
        NSLog(@"%@ %@ %@", a, a1, a2);
        //打印a,a1,a2的地址,比较一下
        NSLog(@"%p %p %p", a, a1, a2);
        
        
        
        //------------------可变的对象---------------------
        NSMutableString *b = [NSMutableString stringWithString:@"abcdefg"];
        //对可变对象不论是浅拷贝还是深拷贝,都是直接克隆了对象出来,都是不同的地址
        NSMutableString *b1 = [b copy];
        NSMutableString *b2 = [b mutableCopy];
        
        NSLog(@"%@ %@ %@", b, b1, b2);
        NSLog(@"%p %p %p", b, b1, b2);
        

        
    }
    return 0;
}


ž对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。

如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。



可以使用copy的类:

NSNumber,

NSString,

NSMutableString,

NSDictionary,

žNSMutableDictionary,

NSArray,

NSMutableArray,

NSSet,

NSMutableSet  


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!