什么情况下使用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对象
网友评论