美文网首页与时俱进的IT
UI(十五)深浅拷贝

UI(十五)深浅拷贝

作者: 社会主义顶梁鹿 | 来源:发表于2018-07-30 17:50 被阅读0次

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

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

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

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

    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 拷贝后两个对象的内存地址是不一样的

    相关文章

      网友评论

        本文标题:UI(十五)深浅拷贝

        本文链接:https://www.haomeiwen.com/subject/lqzfvftx.html