zoukankan      html  css  js  c++  java
  • 深浅拷贝

    拷贝

    含义:就是复制粘贴的意思。

    深拷贝:相当于把源文件拷贝一份,两者互不干扰。新对象计数器置为1,源对象计数器不变。

    浅拷贝:把源文件的快捷方式拷贝一份,源文件删除了,快捷方式(浅拷贝)就不能用了,源对象计数器+1。

     系统自带深拷贝方法:

     (1)数组:- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag

     (2)字典:- (instancetype)initWithDictionary:(NSDictionary<KeyType, ObjectType> *)otherDictionary copyItems:(BOOL)flag

    copy和mutableCopy 拷贝的理解

     不可变对象 copy -> 不可变对象 -> 不管用可变或者不可变类型接收 都是不可变

    字面理解:不可变对象copy成不可变对象之后 不管用可变或者不可变类型接收 都是不可变 

     可变对象   copy -> 不可变对象 -> 不管用可变或者不可变类型接收 都是不可变

    字面理解:可变对象copy成不可变对象之后 不管用可变或者不可变类型接收 都是不可变 

    下同: 

     不可变对象 mutableCopy -> 可变对象 ->不可变对象接收 -> 不可变对象

     不可变对象 mutableCopy -> 可变对象 ->可变对象接收 -> 可变对象

     可变对象   mutableCopy -> 可变对象 ->不可变对象接收 -> 不可变对象

     可变对象 mutableCopy -> 可变对象 ->可变对象接收 -> 可变对象

    注意:

    1、只要使用copy就是不可变对象

     @property (nonatomic, copy) NSMutableArray *list;

     在声明可变数组的属性的时候 只要使用copy这个关键字 就会变成 不变的数组

     原因:在setter的实现中 全部都使用了copy

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

      _list = [list copy];

     }

     2、使用mutableCopy 必须使用 可变类型接收 才是可变对象

     自定义拷贝:

    必须遵守拷贝协议(数组、字典、字符串)都遵守copy协议

    1、自定义拷贝首先导入拷贝协议,<NSCopying,NSMutableCopying>

    2、实现协议方法

    博主水平有限,有错误请大牛们指出

    推荐博客:http://blog.csdn.net/daiyelang/article/details/18730303

  • 相关阅读:
    每日一题-mysql(持续更新)
    http面试问题集锦
    存储测试简析
    横向越权测试—安全漏洞
    性能数据的准备-Jmeter
    获取当天七天时间
    vue生命周期
    vue的全选与反选
    filter兼容问题
    Http与Https
  • 原文地址:https://www.cnblogs.com/adople/p/5356172.html
Copyright © 2011-2022 走看看