使用RxCocoa有时很难区分什么时候使用weak,什么时候使用unowned。当一个闭包执行时其中的self引用的对象有可能已经被释放掉时,我们会使用weak,所以将self声明为可选类型。当我们知道某个闭包执行时我们确定self引用的对象不会被释放掉,我们使用unowned,否则将会导致崩溃
在RxSwift中,特别是在RxCocoa中,选择关键字需遵从下列原则:
- noting:在单例或者绝对不会被释放掉的视图控制器中使用(如根控制器)
- unowned:在确认闭包执行完成之后视图控制器才会被释放时使用
- weak:其余情况
参考资料: RxSwift - By Raywenderlich