RxSwift
的销毁者。为了有更好的内存管理,RxSwift
当然也是需要拥有销毁者的。不要程序不完整。
之前一直就是
let disposeBag = DisposeBag()
****.disposed(by: disposeBag)
这样调用。不调用系统就会报警告。Result of call to 'subscribe(onNext:onError:onCompleted:onDisposed:)' is unused
没有分析原理。知道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 ondeinit
.
This returns ARC (RAII) like resource management toRxSwift
.
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 alsoCompositeDisposable
.
*/
官方给的解释我理解是类似于ARC的回收机制。通过Bag进行内存的回收与释放。
通过self._lock.lock(); defer { self._lock.unlock()
控制释放和插入的顺序问题。
网友评论