【发布时间】:2017-03-06 21:38:54
【问题描述】:
似乎最近添加了ThreadSafeReference 以帮助跨越线程边界。之前,根据我阅读的资料(可能并不详尽),建议只是在您打算使用结果的线程上查询领域;在 UI 线程上有效地查询它。
在后台线程上查询 Realm 是否有好处,或者解析 ThreadSafeReference 是否基本上再次运行查询?
这里是一个使用 RxSwift 的例子:
import RxSwift
import RealmSwift
public static func getAllMyModels() -> Observable<Results<MyModel>>{
return Observable<ThreadSafeReference<Results<MyModel>>>.create{
observer in
// using this queue in this example only
DispatchQueue.global(qos: .default).async {
let realm = try! Realm()
let models = realm.objects(MyModel.self)
let safe = ThreadSafeReference(to: models)
observer.onNext(safe)
observer.onCompleted()
}
return Disposables.create()
}
.observeOn(MainScheduler.instance) // push us back to the UI thread to resolve the reference
.map{
safeValue in
let realm = try! Realm()
let value = realm.resolve(safeValue)!
return value
}
.shareReplayLatestWhileConnected()
}
通过查询某个后台线程并在 UI 线程上进行解析,我有什么收获吗?
【问题讨论】: