UI(十五)深浅拷贝

拷贝:复制一个对象->变成另外一个对象


 深拷贝:复制对象 并且复制对象里面的内容 完全拷贝

 浅拷贝:指针拷贝 只拷贝对象本身 不拷贝里面内容

 看是不是深拷贝 主要看是不是拷贝了对象里面的内容


copy 、mutableCopy 系统自带的这两个拷贝都属于浅拷贝


 实现深拷贝的方式:

 1、可以自定义拷贝(要看具体拷贝的内容)

 并不是所有对象都可以拷贝 只有遵守了拷贝协议的对象才可以

 拷贝 比如:SString NSArray NSDictionary

 (1)导入协议 

 (2)实现协议方法、自定义拷贝

 ①、copyWithZone:

 ②、mutableCopyWithZone:


 2、系统提供给了深拷贝的方法 copyItems 如果是YES 就是深拷贝

  (1)数组的:- (instancetype)initWithArray:(NSArray *)array copyItems:(BOOL)flag

  (2)字典的:- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary copyItems:(BOOL)flag


 *****

不可变对象 copy ->不可变对象

可变对象 copy ->不可变对象

不可变对象 mutableCopy ->可变对象 必须用对应的类型去接收

可变对象 mutableCopy ->可变对象 必须用对应的类型去接收


如果想让声明属性的可变数组能用 需要把copy变成retain (这里没有 mutableCopy)

@property (nonatomic,copy) NSMutableArray *list;


 1、- (void)setList:(NSMutableArray *)list{

 _list = [list copy];

 }

 在set方法中 全部都使用了copy


 mutableCopy?深浅拷贝

 如果:

 指针拷贝->浅拷贝

 对象拷贝->深拷贝

 那么:mutableCopy -> 深拷贝

 在使用mutableCopy 拷贝后两个对象的内存地址是不一样的

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容