笔记摘要(十一)--Swift3.0之解决实例/闭包的循环强引用
2016-10-26 本文已影响42人
风御轩
-
解决实例之间的循环强引用
- 可以通过定义类之间的关系为弱引用或无主引用,以替代强引用,从而解决循环强引用的问题。
- 对于生命周期中会变为
nil
的实例,使用弱引用,关键字weak
。 - 对于初始化赋值后再也不会被赋值为
nil
的实例,使用无主引用。 - 弱引用必须被声明为变量,表明其值能在运行时被修改。弱引用不能被声明为常量。
- 无主引用是永远有值的,因此,无主引用总是被定义为非可选类型。关键字
unowned
。
-
解决闭包引起的循环强引用
- 在定义闭包时同时定义捕获列表作为闭包的一部分,这样可以解决闭包和类实例之间的循环强引用。
- 在闭包和捕获的实例总是互相引用并且总是同时销毁时,将闭包内的捕获定义为无主引用。
- 在被捕获的引用可能会变为
nil
时,将闭包内的捕获定义为弱引用。