我有一个collectionView,一次显示9张图像(200x300px)。但总数可以达到数百个。
目前,如果Image在缓存中,我会检入cellForItem。如果没有,我将从文件系统加载它并将其放入缓存中。
问题:我第一次滚动集合时会丢帧,因为它仍在从文件系统加载图像。 经过一次初步滚动,它的黄油很光滑。 (那是5s)
我想知道将所有(或第一个x)图像预加载到缓存中是否是一个好习惯?
我没有看到5s的大问题,但我担心它会破坏旧的硬件。
有什么想法吗?
答案 0 :(得分:2)
尝试在后台执行磁盘加载机制。您可以设置一个NSOperationQueue填充加载操作的队列。
将NSCache与预加载机制一起使用并没有多大意义,因为即使您预先加载所有图像,系统也可以并且如果认为合适,将驱逐缓存。在这种情况下,你在预加载方面所做的工作无济于事。
答案 1 :(得分:2)
an asynchronous memory + disk image caching with automatic cache expiration handling
而且,我通常会预加载所有图像以避免闪烁