由于应用程序及其扩展在不同的进程中运行,我们可以使用调度队列来序列化任务吗?
应用程序:
let queue = DispatchQueue(label:"com.app.queue")
queue.async {
doSomethingInApp()
}
Run Code Online (Sandbox Code Playgroud)
扩大:
let queue = DispatchQueue(label:"com.app.queue")
queue.async {
doSomethingInExtension()
}
Run Code Online (Sandbox Code Playgroud)
该标签是否充当 iOS 上的全局队列标识符?
它真的能工作并序列化 doSomethingInApp() 和 doSomethingInExtension() 吗?
如果确实如此,如何保护应用程序免受彼此潜在致命的队列名称冲突的影响?
如果它不起作用,可以做什么呢?
我必须为observable的结果提供一个短期缓存.
看看选项,我看到以下内容:
缓存replay(1).refCount()
,当数据准备就绪时,缓存实际值.高速缓存检索将检查实际数据并执行Observable.just
或返回待处理的Observable或发起新请求.
缓存replay(1).autoConnect(1)
并始终返回
后者似乎更直接,但它有一个警告,如何在缓存必须无效时正确处置observable.
签名有:
public Observable<T> autoConnect(int numberOfSubscribers, Consumer<? super Disposable> connection)
但很难说我如何跟踪未完成的订阅以及处理是否优雅.
前者将负责资源释放,但你必须产生更复杂的逻辑.
如果应用程序依赖于后台获取并且需要在获取的数据不为空时进行一些处理,那么这样做是否有意义:
1) 使用后台 NSURLSession 获取数据(使用 backgroundSessionConfigurationWithIdentifier)
2)在后台任务中处理数据(使用beginBackgroundTask)
由于系统给了 30 秒的时间来完成后台提取,因此似乎不需要 #1 或 #2。文档(https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html)没有明确说明这些技术是否可以组合,所以我只是寻求确认.