ios Rxswift:释放订阅不是释放

8qgya5xd  于 2023-04-13  发布在  iOS
关注(0)|答案(1)|浏览(142)

我是Rxswift的新手,我面临着一个问题
我有一个Observable,我在viewDidLoad中进行绑定\订阅,屏幕被重用,每次viewDidload运行时都会发生订阅,因此我有两个订阅,然后当事件从流中发送时,预订运行两次。我希望发生的是,当viewDidload运行取消现有的订阅,我希望这将防止多个订阅,当一个甚至它发送了它不会运行两次。
``func bind(){ // this调用viewDidLoad
disposeBag = DisposeBag()

Observable
.skip(1)
.distinctUntilChanged()
.subscribe(onNext: { [weak self] visibility in
  self?.delegate?.handleChange(visibility)
 })
  .disposed(by: disposeBag)``

iv尝试重置disposeBag,以便取消现有订阅并再次订阅,但当该行运行disposeBag = DisposeBag()时,订阅不会释放,这仍然会导致多个订阅,我该如何解决此问题

mwngjboj

mwngjboj1#

你误解了这个问题。viewDidLoad方法只在一个对象上被调用一次。没有必要替换你的dispose包。
你运行多个订阅的原因是因为你在多个上下文中使用同一个Observable。例如,你订阅了两次observable,或者你订阅了它 * 并在另一个操作符中使用它(如combineLatest或withLatestFrom)。这些都会导致第二次订阅。
解决方案是在添加任何订阅之前调用.share()。这样,单独的订阅将共享副作用,而不是每个订阅都有自己的副作用。

相关问题