领域 - 在后台线程

时间:2017-03-11 21:45:43

标签: ios objective-c realm ios-multithreading

我有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对象。

1 个答案:

答案 0 :(得分:2)

不是为([A-za-z]+\s){3}中的每个对象创建和解析线程安全引用,而只需执行一次:

I am dogI am catI am bearI am frog