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

原文地址:https://www.cnblogs.com/fanxinguu/p/5227898.html