欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-15 08:41:46
...

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