【问题标题】:what is the default caching behavior of NINetworkImageView in Nimbus for iOSNimbus for iOS 中 NINetworkImageView 的默认缓存行为是什么
【发布时间】:2011-09-02 17:24:00
【问题描述】:

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

它默认存储在内存还是磁盘中?默认缓存时长是多少?

【问题讨论】:

    标签: ios image-caching nimbus-ios


    【解决方案1】:

    调用 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 用于磁盘缓存键,所以我们最终只会访问网络一次,缓存图像,然后为第二个网络图像视图从磁盘加载图像并使用其他内容裁剪它模式。

    顺便说一句:这两个缓存属性的文档似乎很糟糕,所以我必须解决这个问题。

    【讨论】:

    • 您好,感谢您的回答。那么磁盘和内存对象的缓存持续时间是多长时间?它是否只是将其保留在磁盘和内存中,直到达到某个预定的限制 maxNumberOfPixelsUnderStress,我应该手动设置它?该设置是否也适用于磁盘缓存?默认情况下,如何为我的应用程序中的图像全局禁用磁盘缓存?
    • > 那么磁盘和内存对象的缓存持续时间有多长? jverkoey.github.com/nimbus/… 全局内存缓存默认为无限制。在不修改 maxNumberOfPixels 属性的情况下,从缓存中删除图像的唯一方法是显式或过期。磁盘缓存的持续时间由网络图像视图上的 diskCacheLifetime 属性确定。 github.com/jverkoey/nimbus/blob/master/src/networkimage/src/…
    • 请注意 maxNumberOfPixelsUnderStress 仅在发出内存警告时使用。这是发出内存警告后应保留在缓存中的像素数。将此与 maxNumberOfPixels 进行对比,maxNumberOfPixels 用于在每次添加图像时限制内存中图像缓存的大小。
    • "我如何在默认情况下为我的应用程序中的图像全局禁用磁盘缓存?"要禁用磁盘缓存,您必须为您创建的每个网络图像视图实例将 imageDiskCache 设置为 nil。
    • 嗨,杰夫 .. 我需要将 three20 迁移到 nimbus,这对我来说很紧急 .. 我也给你邮寄了所有详细信息,但没有回复 .. 你能帮我解决这个问题吗:我发布的问题是:stackoverflow.com/questions/22149414/…
    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2012-02-13
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多