1

我正在查看 Nimbus 项目中的 NINetworkImageView 并对默认缓存设置感到好奇。一旦我调用 setPathToNetworkImage 并加载图像,它会进入全局缓存吗?如果我们创建另一个具有相同 pathToNetworkImage 的 networkImageView 从而避免网络请求,是否足够聪明地意识到它是相同的图像?

它是否默认将其存储在内存或磁盘中?默认缓存持续时间是多少?

4

1 回答 1

6

一旦我调用 setPathToNetworkImage 并加载图像,它会进入全局缓存吗?

是的。默认情况下,它进入 Nimbus 的全局内存图像缓存。下面是后台发生的事情:一旦加载图像并且在图像返回到 UI 线程之前,原始图像存储在磁盘缓存中[1]。一旦加载线程返回,原始图像被设置为 UIImageView 并且原始图像也存储在内存缓存中。

如果我们创建另一个具有相同 pathToNetworkImage 的 networkImageView 从而避免网络请求,是否足够聪明地意识到它是相同的图像?

是的。只要它具有所有相同的可配置属性[2],它就会立即从内存缓存中加载图像(如果存在)。您可以在此处查看图像的缓存键是如何生成的:https ://github.com/jverkoey/nimbus/blob/master/src/networkimage/src/NINetworkImageView.m#L144

[1] 这是因为存储到磁盘是一个阻塞操作,我们不想阻塞 UI 线程。

[2] 如果您有两个网络图像视图加载相同的 url 但一个具有不同的内容模式,则图像将需要处理两次,因为内存中的缓存键会不同。话虽如此,只有图像 URL 用于磁盘缓存键,所以我们最终只会访问网络一次,缓存图像,然后为第二个网络图像视图从磁盘加载图像并使用其他内容裁剪它模式。

另外:这两个缓存属性的文档似乎很糟糕,所以我必须解决这个问题。

于 2011-09-03T03:19:26.580 回答