使用RLMResults快速枚举大型数据集

时间:2017-03-23 04:40:28

标签: ios objective-c realm

我遇到了一个需要在相对较大的数据集(> 7,000个项目)上枚举RLMResults集合的问题。我得到那个领域在访问它时懒洋洋地加载它的对象,但我遇到的问题是我需要访问集合中的每个项目,这会导致7,000多个项目中的每一个被加载到内存中,从而导致记忆错误。根据领域文档,他们不支持限制查询结果。

我可能需要做的一件事就是从文件系统中删除文件,是的,我可以使用谓词进行查询,只询问缓存的项目,但在最坏的情况下查询可以返回库中的所有项目。

RLMResults<DLLibrary *> *allItems = [DLLibrary allObjects];
for( DLLibrary *item in allItems ) {
  // My understanding is that once the realm object is ready, it will be
  // lazily loaded into memory. If I have many 1,000's of items in my data
  // store this quickly becomes a problem memory wise.
  if( item.isCached ) {
    [[DLCacheService instance] deleteCachedFileWithDocumentId:item.id];
  }
}

1 个答案:

答案 0 :(得分:1)

缓解这种情况的最简单方法是使用@autoreleasepool大括号明确保证在您检查完内容后立即释放延迟加载的对象。 :)

RLMResults<DLLibrary *> *allItems = [DLLibrary allObjects];
for (NSInteger i = 0; i < allItems.count; i++) {
    @autoreleasepool {
        DLLibrary *item = allItems[i]; 
        if (item.isCached) {
            [[DLCacheService instance] deleteCachedFileWithDocumentId:item.id];
        }
    }
}