循环引用

单方向的引用不会产生循环引用。

循环引用:闭包引用了self,self引用了闭包。

Swift推荐使用解决循环引用的方法:

[weak self]表示{}中的所有self都是弱引用,需要注意解包。

demo1 {[weak self] in

print(self?.view)

}

MRC中如果要弱引用对象都是使用assign,不会增加引用计数,但是一旦对象被释放,地址不会改变,继续访问,出现野指针。

ARC的weak,本质是一个观察者模式,一旦发现对象被释放,会自动将地址设置为nil,更加安全。

weak的效率会略微差一些。

你可能感兴趣的:(循环引用)