美文网首页
RxSwift 中的 retain cycle

RxSwift 中的 retain cycle

作者: Ajcc | 来源:发表于2019-04-03 11:23 被阅读0次

    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

    相关文章

      网友评论

          本文标题:RxSwift 中的 retain cycle

          本文链接:https://www.haomeiwen.com/subject/pgxgbqtx.html