问题:在声明一个变量时,什么时候用strong,什么时候用copy。
@property使用方法:@property(参数1,参数2)类型名字
@property的默认属性是nonatomic,readwrite,Strong,可是有些时候使用默认属性会crash,比如会产生循环引用等。
所以究竟什么时候使用Strong,什么时候用Copy呢?
举个栗子
声明一个NSArray,如下图所示:
这两个array的属性是不同的,为了看出这二者的区别,我们看一下实现代码以及运行效果,如下图所示:
看到运行效果,我们就可以很清楚的看到了二者的差别,那么为什么用strong和用copy是不一样的呢?
原因
1.strong是强引用,将mulArr赋值给self.array1时,self.array1对mulArr一直是持有强引用的状态,所以当mulArr里面有新的变化时,由strong修饰的self.array1也会随之变化。
2.copy是拷贝,准确来说是深拷贝,将mulArr赋值给self.array2时,self.array2直接就将mulArr里面的数组拷贝了一份,放在了self.array2里面,所以无论mulArr怎么变,都和self.array2无关,自然self.array2不会变。
其他方法
假如用户编程 的时候习惯了使用Strong属性,而忘记了使用copy属性时,例如这样:
为了避免编程的时候出现错误,我们可以在代码实现的时候稍作改动,如下图:
这样的话,代码运行的结果同样也是正确的。