作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有需要迭代的 RLMResults,做一个可能“长时间运行”的下载任务(足够长的时间它不应该在主线程上),并用这个下载的结果更新每个对象。我尝试的最新迭代(在搜索文档寻找答案后)是这样的,虽然这显然不能按预期工作,但它是演示目的的起点:
RLMResults *objectsToSaveImagesFor = [self allObjectsToSaveImagesFor];
for (Object *object in objectsToSaveImagesFor) {
RLMThreadSafeReference *objectRef = [RLMThreadSafeReference referenceWithThreadConfined:object];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
RLMRealm *realm = [RLMRealm realmWithConfiguration:self.realm.configuration error:nil];
Object *threadSafeObject = [realm resolveThreadSafeReference:objectRef];
BOOL success = [self downloadImageForObject:threadSafeObject];
[realm transactionWithBlock:^{
threadSafeObject.imageSaved = success;
}];
});
}
我已经尝试了大约十二次迭代,但无法找到规范的 Realm 方法来做我想做的事情,即下载大量图像(数千张)并更新我的每个 Realm 对象都带有在后台线程上下载的结果。
最佳答案
与其为 RLMResults
中的每个对象创建和解析线程安全引用,不如只执行一次:
RLMResults *objectsToSaveImagesFor = [self allObjectsToSaveImagesFor];
RLMThreadSafeReference *objectsRef = [RLMThreadSafeReference referenceWithThreadConfined:objectsToSaveImagesFor];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
RLMRealm *realm = [RLMRealm realmWithConfiguration:self.realm.configuration error:nil];
RLMResults *objectsToSaveImagesFor2 = [realm resolveThreadSafeReference:objectsRef];
for (Object *object in objectsToSaveImagesFor2) {
BOOL success = [self downloadImageForObject:threadSafeObject];
[realm transactionWithBlock:^{
object.imageSaved = success;
}];
}
});
关于ios - Realm - 在后台线程上批量更新 RLMResults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42741020/
我是一名优秀的程序员,十分优秀!