对于属性声明时,尤其是对NSString的声明,不知道该用strong还是copy,也不清楚二者之间具体有何区别?接下来,我将从两方面来介绍下strong和copy的区别,分别是可变和不可变。
1.操作不可变对象的时候:
@interface Person : NSObject
@property (
nonatomic,
strong)
NSArray *array1;
@property (
nonatomic, copy)
NSArray *array2;
@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