关于assign,copy,strong, week的区别

2017-02-24  本文已影响0人  赖熊
这个星期把项目已经交差了,比较清闲,突然想回温一下这个几个修饰符,所以写了一下。
1.assign:
这个玩意只能修饰基本类型,记得刚刚接触的时候,总是好奇为什么都是
差不多的,为什么它不去修饰对象呢,现在我解释一下,assgin可以修饰对象
,但是当它释放的时候,地址不会重置为nil,它修饰基本类型是可以,
因为它们存在栈中,和堆没有关系,遵循先进后出原则,
所以还是用它老老实实修饰基本类型。

2.copy:
复制不可变文本,就是复制的是值而不是地址,赋值的时候,旧的值不变,

一般用于修饰NSString类型和block,当初刚刚接触的时候,我就是不相信,
我就想让它修饰可变文本,例如mutableArray,结果,当我给它增加值的时候
,新的值存在新的地址中,原来的值未变,得到的是新的值,直接心碎的感觉,
有这样的一次经历,我就老实了,当然当我们想让NSString都改变的话我们设置为strong,
前提是我们用mutable,这样我们更改的nssting会随着后面的改变,
前面的也会发生改变。
3.strong:
复制可变的文本,一般用来修饰出string和block之外的oc对象,
赋值的时候,地址相同,值当然也相同。

4.week:
当不用的时候,地址直接赋值为nil,所以地址再次被引用的时候,不会崩溃,
一般用来修饰代理,防止由于strong引起的相互引用。

对于strong和copy:strong 相当于办公室的灯,只有最后一个人走的时候,
灯才会被关闭,对象才会释放。copy相当于我们看到的灯光,
无论谁关闭了它,它就不会再亮了。
上一篇 下一篇

猜你喜欢

热点阅读