通过下面的代码调试
let ob = Observable<Any>.create { observer -> Disposable in
observer.onNext("销毁者")
return Disposables.create { print("销毁释放了") }
}
// 序列订阅
let dispose = ob.subscribe(onNext: { anything in
print("订阅到了:\(anything)")
}, onError: { error in
print("订阅到Error:\(error)")
}, onCompleted: {
print("完成了")
})
//.disposed(by: disposeBag) 加入垃圾袋
print("执行完毕")
dispose.dispose()
序列的销毁有三种方式:
- 发送特定事件: onError, onCompleted
- 销毁者主动调用dispose(): dispose.dispose()
- 加入垃圾袋(官方推荐,类似ARC的自动释放池): disposed(by: disposeBag)
上面的代码也印证了第一种方式,在发送error、completed事件后内部调用了dispose(),对序列进行销毁。那么注销者的核心方法就是dispose(),让我们来探一探。