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\ncopyArr:%p",arr,self.Copyarr); }
打印数组地址结果是
这说明属性初始化用copy选项的时候用另一个对象向其该属赋值的时候不是单纯的指针指向,而是开辟了一块新的空间并赋值也就是深拷贝,而对比于strong选项的属性来说就是单纯的指针指向也就是浅拷贝,
但是在测试中还发现了一点如果将self.Copyarr = arr 改成 _Copyarr = arr赋值的话
又变成浅拷贝了,这说明了什么呢????说明了copy的操作是在setter方法中进行的!所以切记要以上方法赋值才有效。
还有就是当属性的类型是不可变类型的时候类似的:NSArray,NSString即使将属性选项改为Copy也还是前拷贝,这个应该是因为本来类型就是不可变的所以,所以深浅拷贝的问题就不用考虑啦!!!!