iOS深拷贝、浅拷贝

copy
copy方法返回的是强引用指针。深拷贝指的是内容复制,在内存中重新分配空间给新对象。浅拷贝指的是指针复制,浅拷贝的对象引用计数+1。拷贝不可变对象会浪费内存空间,所以浅拷贝就足够了。copy能够减少对象对上下文的依赖。

不是所有对象都支持copy mutablecopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutableCopying 协议的类才可以发送mutableCopy消息。
copy返回不可变对象,mutable copy返回可变对象。

一、非容器类对象
NSString NSNumber

1)对不可变对象,copy时指针复制(浅拷贝),mutablecopy是对象复制(深拷贝);

2)对可变对象,copy、mutablecopy都是深拷贝。

二、系统容器对象
NSArray NSDictionary

1)对不可变对象,copy时指针复制(浅拷贝),mutablecopy时对象复制(深拷贝);容器内元素都是指针复制。

2)对可变对象,copy mutablecopy都是深拷贝。元素都是指针复制。

*容器内的元素都是指针复制(浅拷贝),要想连元素都对象复制,使用官方提供的 initWithArray: copyItems:

你可能感兴趣的:(iOS深拷贝、浅拷贝)