我遇到了一个需要在相对较大的数据集(> 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];
}
}
答案 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];
}
}
}