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

上一篇下一篇

猜你喜欢

热点阅读