我正在查看Nimbus项目中的NINetworkImageView,并对于默认的缓存设置感到好奇。一旦我调用setPathToNetworkImage并加载图像,它是否会进入全局缓存?如果我们使用相同的pathToNetworkImage创建另一个networkImageView并因此避免网络请求,它是否足够智能以实现它是相同的图像?
默认情况下是否将其存储在内存或磁盘中?什么是默认缓存持续时间?
答案 0 :(得分:6)
一旦我调用了setPathToNetworkImage并加载了一个图像,它是否会进入全局缓存?
是。默认情况下,它会进入Nimbus的全局内存中图像缓存。这是后台发生的事情:一旦图像加载,在图像返回到UI线程之前,原始图像存储在磁盘缓存[1]中。加载线程返回后,原始图像将设置为UIImageView,原始图像也存储在内存缓存中。
如果我们使用相同的pathToNetworkImage创建另一个networkImageView并因此避免网络请求,它是否足够智能以实现它是相同的图像?
是。只要它具有所有相同的可配置属性[2],它就会立即从内存缓存中加载图像(如果存在)。您可以在此处查看图像的缓存密钥的生成方式:{{3}}
[1]这是因为存储到磁盘是一个阻塞操作,我们不想阻止UI线程。
[2]如果您有两个网络图像视图加载相同的网址,但其中一个具有不同的内容模式,则图像将需要处理两次,因为内存中的缓存键将不同。话虽这么说,只有图像URL用于磁盘缓存密钥,所以我们只会最终点击网络一次,缓存图像,然后是第二个网络图像视图从磁盘加载图像并用其他内容裁剪它模式。
除此之外:看起来两个缓存属性的文档都被标记了,所以我必须解决这个问题。