美文网首页
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