关于声明属性Strong还是Copy的用法

来源:互联网 发布:linux tail 最后100行 编辑:程序博客网 时间:2024/05/21 11:21

       对于属性声明时,尤其是对NSString的声明,不知道该用strong还是copy,也不清楚二者之间具体有何区别?接下来,我将从两方面来介绍下strong和copy的区别,分别是可变和不可变。

1.操作不可变对象的时候:

// 定义一个Person类@interface Person : NSObject@property (nonatomic, strong) NSArray *array1; //strong 类型@property (nonatomic, copy) NSArray *array2;  //copy 类型@end@implementation ViewController - (void)viewDidLoad {    [super viewDidLoad];    NSMutableArray *testArr = [NSMutableArray arrayWithObject:@"test1"];    self.array1 = testArr
    self.array2 = testArr;    [books addObject:@"test2"];
NSLog(@"\n array1:%@ \n array2:%@",self.array1,self.array2);}@end

输出结果:

array1 :(

test1,

test2

)

array2 :(

test1

)

我们可以发现,在可变字符串赋值的情况下,strong类型的赋值,地址指向了原字符串地址,而copy类型的赋值却指向了另外一个地址,由此可见,在可变字符串赋值的情况下,copy进行了一次深拷贝,将原字符串重新复制了一份在磁盘中保存了下来。但是,我们发现虽然就复制了一份原字符串的值,但是类型并没有改变成可变字符串,而是保持了原有的不可变属性。

总结

在不可变字符串赋值中,strong和copy都是没有问题的,而在可变数组赋值中,我们大多数情况下不想因为赋值而改变了原有字符串的属性,所以我们日常工作中我们使用最多的还是copy属性。但是根据实际情况不同,也可以使用strong属性。