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也还是前拷贝,这个应该是因为本来类型就是不可变的所以,所以深浅拷贝的问题就不用考虑啦!!!!

  • 相关阅读:
    软件项目管理
    asterisk channel driver dev ref
    标 题: 有什么办法快速把pc上的网址发送到手机上
    dongle0
    ubuntu
    Huawei E1750 Asterisk
    Jquery重新学习之七[Ajax运用总结A]
    Jquery重新学习之六[操作XML数据]
    Jquery重新学习之五[操作JSON数据]
    Jquery重新学习之四[核心属性与文档处理属性]
  • 原文地址:https://www.cnblogs.com/fanxinguu/p/5227898.html
Copyright © 2011-2022 走看看