我在集合视图中显示一些图像,并使用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
答案 0 :(得分:2)
请参阅NSFetchRequest
的课程参考-setPropertiesToFetch:
。 “仅当resultType设置为NSDictionaryResultType时才使用此值。”
你是正确的,迭代所有获取的对象会破坏小批量的好处。不过,我很好奇,为什么你需要一次预取所有的图片网址。如果您这样做是为了触发下载,请在-awakeFromFetch
中进行操作:将object.url
关闭传递给您的SDWebImagePrefetcher
,这会将请求排入队列并开始或继续处理。你必须继承NSManagedObject
才能做到这一点。