zoukankan      html  css  js  c++  java
  • ios高级-属性中Copy的使用

    在ARC环境中,当我们声明一个属性的时候,有时会选择Copy这个选项,那在ARC中它究竟有什么作用,闲来无事我们来探究一下~~

    其实初学者可能会大致的知道,它里面含有一个拷贝的意思,单究竟是怎样在这里深究一下

    上代码:

    @interface ViewController ()
    @property (nonatomic, copy)NSMutableArray * Copyarr;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        NSMutableString * arr = [NSMutableArray arrayWithObject:@"22"];
        self.Copyarr = arr ;
        NSLog(@"arr:%p
    copyArr:%p",arr,self.Copyarr);
    }

    打印数组地址结果是

    这说明属性初始化用copy选项的时候用另一个对象向其该属赋值的时候不是单纯的指针指向,而是开辟了一块新的空间并赋值也就是深拷贝,而对比于strong选项的属性来说就是单纯的指针指向也就是浅拷贝,

    但是在测试中还发现了一点如果将self.Copyarr = arr 改成 _Copyarr = arr赋值的话

    又变成浅拷贝了,这说明了什么呢????说明了copy的操作是在setter方法中进行的!所以切记要以上方法赋值才有效。

    还有就是当属性的类型是不可变类型的时候类似的:NSArray,NSString即使将属性选项改为Copy也还是前拷贝,这个应该是因为本来类型就是不可变的所以,所以深浅拷贝的问题就不用考虑啦!!!!

  • 相关阅读:
    Day05_java方法 方法
    Day05_java流程控制 break、continue
    Day05_java流程控制 循环结构
    Day05_java流程控制 switch选择结构
    Day05_java流程控制结构
    Day04_java流程控制 顺序结构
    Day04_java流程控制 用户交换Scanner
    Day03_java基础 JavaDoc生成文档
    Day03_java基础 包机制
    ltib学习抄录
  • 原文地址:https://www.cnblogs.com/fanxinguu/p/5227898.html
Copyright © 2011-2022 走看看