美文网首页
RxSwift学习(8)dispose

RxSwift学习(8)dispose

作者: 忆痕无殇 | 来源:发表于2019-08-07 17:49 被阅读0次

RxSwift的销毁者。为了有更好的内存管理,RxSwift当然也是需要拥有销毁者的。不要程序不完整。
之前一直就是

    let disposeBag = DisposeBag()
      ****.disposed(by: disposeBag)

这样调用。不调用系统就会报警告。Result of call to 'subscribe(onNext:onError:onCompleted:onDisposed:)' is unused

报警告信息.png
没有分析原理。知道OC的MRC是谁创建谁销毁的原理。这个看着像是个袋子,先把要销毁的装着。等到一定的时机在进行销毁。那么这个一定的时机是什么时候呢?
看一下源码
  private func _insert(_ disposable: Disposable) -> Disposable? {
        self._lock.lock(); defer { self._lock.unlock() }
        if self._isDisposed {
            return disposable
        }

        self._disposables.append(disposable)

        return nil
    }

insert进行插入

  private func _dispose() -> [Disposable] {
        self._lock.lock(); defer { self._lock.unlock() }

        let disposables = self._disposables
        
        self._disposables.removeAll(keepingCapacity: false)
        self._isDisposed = true
        
        return disposables
    }
    

removeAll进行全部移除

/**
Thread safe bag that disposes added disposables on deinit.
This returns ARC (RAII) like resource management to RxSwift.
In case contained disposables need to be disposed, just put a different dispose bag
or create a new one in its place.
self.existingDisposeBag = DisposeBag()
In case explicit disposal is necessary, there is also CompositeDisposable.
*/

官方给的解释我理解是类似于ARC的回收机制。通过Bag进行内存的回收与释放。
通过self._lock.lock(); defer { self._lock.unlock()控制释放和插入的顺序问题。

相关文章

网友评论

      本文标题:RxSwift学习(8)dispose

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