美文网首页Rx
RxSwift源码分析(18)——deallocated

RxSwift源码分析(18)——deallocated

作者: 无悔zero | 来源:发表于2020-11-05 19:40 被阅读0次

除了deallocating,还有deallocated

vc.rx.deallocated
.subscribe { (event) in
    print("页面释放了")                
}

它的源码相对就简单多了,创建了DeallocObservable类并通过objc_setAssociatedObject关联起来:

extension Reactive where Base: AnyObject {
    
    public var deallocated: Observable<Void> {
        return self.synchronized {
            if let deallocObservable = objc_getAssociatedObject(self.base, &deallocatedSubjectContext) as? DeallocObservable {
                return deallocObservable._subject
            }

            let deallocObservable = DeallocObservable()

            objc_setAssociatedObject(self.base, &deallocatedSubjectContext, deallocObservable, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            return deallocObservable._subject
        }
    }
    ...
}
fileprivate final class DeallocObservable {
    let _subject = ReplaySubject<Void>.create(bufferSize:1)

    init() {
    }

    deinit {
        self._subject.on(.next(()))  //发送
        self._subject.on(.completed)  //完成
    }
}

当页面释放时,DeallocObservable也会释放,接着deinit,然后就会发送响应和完成。

相关文章

网友评论

    本文标题:RxSwift源码分析(18)——deallocated

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