RxSwift-DisposeBag垃圾袋

DisposeBag垃圾袋分析, demo运行如下:

self.intervalOB = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.init())
        self.intervalOB.subscribe(onNext: { (num) in
            self.showSencondNum.text = String(num)
        }).disposed(by: disposeBag)
        
        _ = self.stopAction.rx.tap.subscribe(onNext: {
            print("点击按钮")
            self.disposeBag = DisposeBag()
        })

subscribe订阅序列的时候返回一个销毁者DisposeBase,当调用.disposed(by: disposeBag)的时候,会调用insert()

public func disposed(by bag: DisposeBag) {
        bag.insert(self)
    }

实际是插入到数组_disposables = [Disposable]()

 fileprivate var _disposables = [Disposable]()
    fileprivate var _isDisposed = false
    /// Constructs new empty dispose bag.
    public override init() {
        super.init()
    }
    /// Adds `disposable` to be disposed when dispose bag is being deinited.
    ///
    /// - parameter disposable: Disposable to add.
    public func insert(_ disposable: Disposable) {
        self._insert(disposable)?.dispose()
    }
    private func _insert(_ disposable: Disposable) -> Disposable? {
        self._lock.lock(); defer { self._lock.unlock() }
        if self._isDisposed {
            return disposable
        }
        self._disposables.append(disposable)
        return nil

当随着对象的生命周期结束,会调用deinit(),内部调用dispose()

deinit {
        self.dispose()
    }

紧接着会循环调用disposable.dispose(),源码分析如下:

 private func dispose() {
        let oldDisposables = self._dispose()

        for disposable in oldDisposables {
            disposable.dispose()
        }
    }

实现销毁者的销毁;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 开篇 一直觉得自己似乎越来越浮躁了,可能当代的大多数年轻人都活在恐慌里,问题已经从小时候的不思进取变成了“太思进取...
    Maru阅读 3,833评论 13 26
  • 当程序员原来越浮躁了,项目做多了大都是雷同的, 对技术没啥帮助,读一些牛逼的第三方框架,有助于提升,关于RxSwi...
    水落斜阳阅读 784评论 0 1
  • 任何对象都有生命周期,有创建就要销毁。 OC中有init和dealloc,swift有init和deinit,Rx...
    yahibo阅读 468评论 0 6
  • 发现 关注 消息 RxSwift入坑解读-你所需要知道的各种概念 沸沸腾关注 2016.11.27 19:11*字...
    枫叶1234阅读 2,869评论 0 2
  • 近来,在朋友圈晒了几张空中瑜伽的照片,有仙仙的吊绳做道具,再加上老师的拍照水平,每一张都拍的很唯美,大家纷纷为我点...
    谢湘阅读 3,645评论 0 2