gpt4 book ai didi

ios - SDWebImage 不缓存

转载 作者:可可西里 更新时间:2023-11-01 05:22:01 24 4
gpt4 key购买 nike

我正在使用选项设置为 0 的 [SDWebImageDownloader.sharedDownloader downloadImageWithURL] 下载图像。我最初没有对它们做任何事情,我知道它们将被缓存。但是,当我使用完全相同的函数稍后显示图像时,该函数再次下载图像,而不是从缓存中获取图像(图像缓存类型为 0)。在这两种情况下,图像的 url 都是相同的。我对缓存的理解不正确吗?

最佳答案

享受缓存功能的最简单方法是使用 SDWebImageManager而不是 SDWebImageDownload . SDWebImageManager 提供了 SDImageCache 功能,而如果您使用 SDWebImageDownload,则必须依赖 NSURLCache(有限制/问题)或编写自己的缓存代码。

此外(在 Gustavo 的问题中隐含),如果您只是想设置 UIImageView 的图像,实际上最好不要使用这些类中的任何一个,而使用 UIImageView+WebCache 类代替。它享有 SDWebImageManager 的所有缓存功能,但也提供其他优势(特别是重用 UITableViewCellUICollectionViewCell 对象)。


在对另一位用户的评论中,您说您正在提前下载所有图像,“只是为了让它们缓存起来,这样当用户确实想要查看图像时,他不必等待”

这是一个很好的延伸目标,但这种预取(有时称为预加载,与更常见的延迟加载相反)有几个含义:

  • 除非您确信用户确实需要所有图像,否则这是对他们移动设备的蜂窝数据计划的积极使用,所以也许您应该只在以下情况下这样做在 WiFi 上(可由 Reachability 确定)。 Apple 甚至拒绝了使用过多蜂窝带宽的应用。

  • 该应用程序在内存方面会比必要的更积极(导致更多暂停的应用程序被终止,这不会影响您的应用程序的用户体验,但 Apple 要求我们所有人都成为好公民,不要使用比我们需要的更多的内存)。同样,如果用户需要所有的图像,那么这是一件好事,但如果不需要,应该真正减少内存消耗,而不是将可能不需要的东西加载到缓存中本届 session 需要。另请注意,下载一堆可能需要下载的东西,但只是作为预防措施而完成的,也会(适度)对电池造成影响。

  • 如果您对后台数据发出大量请求,请确保您没有用完所有有限的网络连接(您只有五个)并使系统积压大量请求。好消息是 UI UIImageView 类别自然有利于当前的 UI(从根本上说,这是一种延迟加载机制)。但是假设有 100 张图片,用户启动应用程序并向下滚动到列表底部。您真的希望 #90 的请求(在屏幕上并且用户正在等待)等待 #1-89 完成吗?

    参见 WWDC 2012 视频 Asynchronous Design Patterns with Blocks, GCD, and XPC ,第 7 节,“分离控制和数据流”,在视频中大约 48 分钟,讨论了这是如何产生问题的。

    如果不出意外,我会确保您使用网络链接调节器(MacOS 硬件 IO 工具的一部分或在设备上的“设置”>“常规”>“开发人员”下)测试应用程序。因此,打开网络链接调节器,删除并重新安装应用程序(以清空持久存储缓存),然后使用这种慢速连接启动应用程序,尝试在图像加载过程中四处导航。一个简单的“让我们开始预取所有内容”可能无法在您真正想要的慢速网络上提供当前 UI 的必要优先级。

综上所述,您可能已经仔细考虑了所有这些含义,如果是这样,我为深究显而易见的事情而道歉。只是在实现对所有图像的积极预取之前必须小心。

关于ios - SDWebImage 不缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com