美文网首页
什么情况下使用weak关键字,与assign有什么不同?

什么情况下使用weak关键字,与assign有什么不同?

作者: 黄易女民工jiang | 来源:发表于2018-07-24 17:25 被阅读0次


什么情况下使用weak关键字

a.在ARC中,在可能出现循环引用的情况下,往往要通过让其中一端使用weak来解决,比如delegate.

b.自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用weak,自定义IBOutlet控件一般也使用weak。

为什么weak能打破循环引用?

weak与assign的不同点

a.weak此特质表明该属性定义了一种“非拥有关系”,为这种属性设置新值时,既不保留新值,也不释放旧值。此特质与assign类似,然而在属性所指的对象遭到摧毁时,属性值也会被清空nil 。而assign的“设置方法”只会执行针对“纯量类型”的简单赋值操作。当assign指针所指向的内存被释放(引用计数为0),不会自动赋值nil。如果调用assign修饰的属性,会导致野指针操作,如果这个操作发生时内存还没有改变内容,依旧可以输出正确的结果,如果内容发生了改变,就会crash。

b.assign可以用非OC对象,而weak必须用于OC对象

相关文章

网友评论

      本文标题:什么情况下使用weak关键字,与assign有什么不同?

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