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

  • 相关阅读:
    CSS 按类查看的常用样式属性
    html5前端准备资料
    编译和链接一些错误和警告
    [转]assert()函数用法总结
    [转]C++ 函数模板特化导致的多重定义链接错误
    [转]退出线程的几种方法
    [总结]编程中遇到的vc提示的一些警告
    [转]__declspec(dllexport) 和 __declspec(dllimport)
    [转]PROCESS_INFOMATION
    [转载] STARTUPINFO结构体
  • 原文地址:https://www.cnblogs.com/adople/p/5356172.html
Copyright © 2011-2022 走看看