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

xiaoxiao2021-02-28  32

       对于属性声明时,尤其是对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属性。

转载请注明原文地址: https://www.6miu.com/read-35811.html

最新回复(0)