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

Ios 核心数据-尝试预取所有行的属性很慢,ios,core-data,Ios,Core Data,我正在集合视图中显示一些图像,并使用SDWebImage预取所有图像的缩略图 我在NSFetchRequest中使用了20的批处理大小,但是当迭代每个对象以获取我需要的图像的url时,批处理大小性能增益被浪费了。重新加载数据需要0.3秒而不是0.000295秒,这会导致UI中的明显延迟 我尝试过设置[请求setPropertiesToFetch:@[@“propertyName”]],但似乎没有什么不同。我想这不是我想要的方法 有什么建议吗 编辑: 我使用的是UICollectionView,它

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

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

我尝试过设置
[请求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

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


您是对的,迭代所有获取的对象会破坏小批量的好处。不过,我很好奇,为什么需要一次预取所有图像URL。如果您这样做是为了触发下载,请查看
-awakeFromFetch
中的操作:将
对象.url
传递给您的
SDWebImagePrefetcher
,它将使请求排队并开始或继续处理。要做到这一点,您必须子类化
NSManagedObject

为您的问题添加一些代码,这还不够详细。您真的下载了图像吗?或者它们存储在核心数据中?不。图像不会以任何方式存储在核心数据中。所有图像内容都由
SDWebImage
处理,这是一个用于从缓存异步下载/缓存/加载图像的库。我将尝试在问题中添加一些细节。@Lescaionel面对同样的问题,您最终做了什么?我看不到任何好的解决方案来预取由
NSFetchedResultsController
支持的数据,而不仅仅是延迟加载内容。谢谢,我错过了resultType属性。一旦集合视图单元格可见,我将下载每个图像,但我还希望预取图像,以便当用户滚动时,它们已经加载。问题是,
SDWebImagePrefetcher
一旦传递了一个新数组,就会取消另一个操作,因此我一次需要所有URL。围绕
SDWebImagePrefetcher
编写自己的控制器类如何?该类将接受单个映像请求,构建自己的队列,然后使用
-prefetchURLs:completed:
中的回调块启动另一批。