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