RxSwift 中的 retain cycle
2019-04-03 本文已影响0人
Ajcc
RxSwift 中的 retain cycle
case 1:
button.rx.tap
.subscribe(onNext: { [weak self] (_) in
// To be continue
}).disposed(by: disposeBag)
这种情况是最常见的一种,因为 viewController
强引用了 button 而 button 又强引用了 viewController, 所以这里需要用 [weak self]
避免 retain cycle
case 2:
button.rx.controlEvent(.touchUpInside)
.flatMapLatest({ [weak self] (_) -> Observable<User> in
return HTTPClient.rx.getUser()
.catchError({ [weak self] (error) -> Observable<User> in
// catchError
})
})
.subscribe(onNext: {[weak self] (user) in
// To be continue
})
.disposed(by: disposeBag)
这种情况比较特殊,因为第一个 flatMapLatest
没用调用到 self
的地方,我们往往会把上面的 [weak self]
省略掉,但如果这样会造成 HTTPClient.rx.getUser
的 block 即使用了 [weak self] 也会出现 retain cycle
。