我遇到了一个非常内容丰富的应用程序问题我正在开发中。我使用SDWebImage缓存并将图像异步加载到我的UIImageViews和UIButtons(如果适用)。在这个应用程序中,我有内容源,它是从服务器URL加载的3列宽图片的集合视图。
当我滚动时,内存会像疯了一样建立,但在需要时会自动清除SDWebImage的预期行为。但是,此应用程序是一个选项卡式应用程序,因此,如果我部分滚动一个源,切换选项卡并滚动另一个选项卡上的源 - 内存只是构建而不会被清除。
我知道的第一个问题是图像尺寸非常大并且在应用程序内缩小,而不是以100x100 PX的正确尺寸下载,而是640x640像素。这显然是固定的,因为每个图像需要多个尺寸用于整个应用程序中的各种显示,这将降低VM的增长速度,但我不相信它将最终解决内存的根本问题在浏览不同的页面时达到崩溃应用程序的程度。
我注意到像Wanelo和Path以及Facebook这样的应用程序都有无限的内容,这些内容可以无限滚动和加载而不会在崩溃性能方面有任何明显的损失,他们是如何做到的?
我还附带了一个视频,其中注释了我使用乐器中的分配模板来分析我的应用程序。我可以阅读信息确定,但我不确定是否有一些我失去的东西,就分配/调用堆栈/等而言,这可能会导致我朝着正确的方向解决这个问题
此处提供的个人资料视频:http://youtu.be/J4zici41TMs
答案 0 :(得分:5)
如果您看到SDWebImage是异步加载图像的最佳方式。你说你正在使用基于标签的应用程序,在某些时候你的应用程序崩溃。
基本上SDwebImage会下载图像并将它们保存在缓存中(以加快速度)并在本地保存图像。无论何时从一个选项卡移动到另一个选项卡,都可以强制清除缓存。这可能对你有所帮助。
在切换到其他标签时尝试以下代码。
[[[SDWebImageManager sharedManager] imageCache] clearMemory];
另外,为了了解其他缓存apis,您可以查看此内容。我总是喜欢SDWebImage,因为它非常好而且快速。 link
希望这会对你有所帮助。快乐的编码:)