strong与copy

作者: 我是小五 | 来源:发表于2016-11-16 15:39 被阅读122次

问题:在声明一个变量时,什么时候用strong,什么时候用copy。


@property使用方法:@property(参数1,参数2)类型名字

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

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

举个栗子

声明一个NSArray,如下图所示:

图1 声明array

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

图2 代码实现 图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 声明变量2

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

图5 代码实现2

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

欢迎大家及时沟通交流



相关文章

网友评论

    本文标题:strong与copy

    本文链接:https://www.haomeiwen.com/subject/cilrpttx.html