我想使用 Reactive Cocoa 4 从 API 每 15 秒刷新一次数据。由于多个订阅者可以同时请求这些数据,我希望多个订阅者共享一个数据源。
我目前的方法是拥有一个Signal
并将其共享给每个需要数据的实例。此信号应在第一个信号被订阅后立即开始刷新,并在最后一个信号被释放后结束。
SignalProducer<String, NoError> { observer, disposable in
self.disposable = self.repeatTimer.observeNext { _ in
NSLog("start network request")
observer.sendNext("result")
}
}.on(disposed: {
NSLog("disposed")
}).startWithSignal { signal, disposable1 in
self.updateSignal = signal
}
}
return (updateSignal, disposable!)
因此,对于第一个请求,我创建并存储了 updateSignal,随后的每个请求都将获得该信号。
我的第一个问题:我怎么知道最后一个订阅者何时释放了它的信号?那么我什么时候可以停止请求?
我的第二个问题:我存储来自我的重复网络请求的一次性用品,self.disposable
我也将其返回给订阅者。如果订户只处理其信号(他从中获得Signal.observeNext()
)内部循环,我记录“启动网络请求”的地方将无休止地运行。即使外部信号被处理,我是否真的需要自己停止该信号?
共享重复请求是否有更好的方式或模式?