所以究竟什么时候使用Strong

@property使用方法:@property类型名字

@property的默认属性是nonatomic,readwrite,Strong,可是有些时候使用默认属性会crash,比如会产生循环引用等。

所以究竟什么时候使用Strong,什么时候用Copy呢?

举个栗子

金沙网址,声明一个NSArray,如下图所示:

金沙网址 1图1
声明array

这两个array的属性是不同的,为了看出这二者的区别,我们看一下实现代码以及运行效果,如下图所示:

金沙网址 2图2
代码实现金沙网址 3图3
运行效果图

看到运行效果,我们就可以很清楚的看到了二者的差别,那么为什么用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属性时,例如这样:

金沙网址 4图4
声明变量2

为了避免编程的时候出现错误,我们可以在代码实现的时候稍作改动,如下图:

金沙网址 5图5
代码实现2

这样的话,代码运行的结果同样也是正确的。

相关文章