OC语言基础十二:深浅拷贝

文章目录

  • 说明
    • 浅拷贝
    • 深拷贝
  • 使用
    • copy不可变拷贝
    • mutableCopy可变拷贝

说明

浅拷贝

OC语言基础十二:深浅拷贝_第1张图片
浅拷贝只进行对象地址的拷贝,效率高,但是一旦person1操作了Person对象,person2指向的对象空间也会发生内容上的改变。

深拷贝

OC语言基础十二:深浅拷贝_第2张图片
深拷贝,直接去内存中开辟一个新的对象空间的地址,然后把原先要拷贝的对象内容全部搬到副本空间里面来,也就是创建一个对象的副本实体。效率低,但是Person1和Person2操作的是2个不同的内存空间,所以Person1对对象的操作,不会影响到Person2的对象内存空间的。

使用

copy不可变拷贝

返回的对象一定是不可变的。

NSString *string=@"string";
NSLog(@"string:%p",string);

NSString *string2=[string copy];
NSLog(@"string2:%p",string2);

输出:string和string2,的地址是一样的。当copy拷贝的是一个不可变对象的时候,copy方法进行的是浅拷贝操作

NSMutableString *mutableString=[NSMutableString  stringWithString:string];
NSLog(@"mutableString:%p",mutableString);

NSString *string3=[mutableString copy];
NSLog(@"string3:%p",string3);

输出:两次的地址不同
copy是不可变拷贝,如果拷贝了可变对象,只有执行深拷贝才能完成。

mutableCopy可变拷贝

无论拷贝的对象是可变的还是不可变的,都会进行深拷贝,而且拷贝出来的空间一定是可变的。

NSMutableString *mutableStringCopy=[string mutableCopy];
NSLog(@"mutableStringCopy:%p",mutableStringCopy);

输出:string和mutableStringCopy的地址不一样。执行的是深拷贝。

NSMutableString *mutableStringCopy=[mutableString mutableCopy];
NSLog(@"mutableStringCopy:%p",mutableStringCopy);

输出:mutableString和mutableStringCopy地址不一样,执行的也是深拷贝。

你可能感兴趣的:(OC基础)