gpt4 book ai didi

ios - Realm - 在后台线程上批量更新 RLMResults

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:25:14 24 4
gpt4 key购买 nike

我有需要迭代的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com