核心数据 - 尝试预取所有行的属性很慢

时间:2013-12-17 16:19:47

标签: ios core-data

我在集合视图中显示一些图像,并使用SDWebImage为所有图像预取缩略图。

我在NSFetchRequest中使用的批量大小为20,但是当迭代每个对象以获取我需要的图像的url时,批量大小的性能增益被浪费了。重新加载数据需要0.3s而不是0.000295s,这会导致UI的明显延迟。

我已尝试设置[request setPropertiesToFetch:@[@"propertyName"]],但似乎没有任何区别。我想这不是我正在寻找的方法。

有什么建议吗?

编辑:

我正在使用由UICollectionView(和委托)数据源支持的NSFetchedResultsController。我正在制作批量大小为20的NSFetchRequest并通过NS-FRC获取它。我还需要从所有获取的对象中获取URL列表,即:

for(NSManagedObjectSubclass *object in frc.fetchedObjects) 
// this is causing the slow-down, because it's faulting all the objects
// not what you'd want if you have many objects!
{
   [urlList addObject:(object.url)]
}

[SDWebImagePrefetcher prefetchUrls:urlList]; 
// this runs in the background and downloads/gets from cache a list of images

1 个答案:

答案 0 :(得分:2)

请参阅NSFetchRequest的课程参考-setPropertiesToFetch:。 “仅当resultType设置为NSDictionaryResultType时才使用此值。”

你是正确的,迭代所有获取的对象会破坏小批量的好处。不过,我很好奇,为什么你需要一次预取所有的图片网址。如果您这样做是为了触发下载,请在-awakeFromFetch中进行操作:将object.url关闭传递给您的SDWebImagePrefetcher,这会将请求排入队列并开始或继续处理。你必须继承NSManagedObject才能做到这一点。

相关问题