iOS深拷贝、浅拷贝
2016-03-24 本文已影响104人
VeraZhang
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: