ios - SDWebImage 疯狂的内存增长,高虚拟内存?高脏内存大小。附视频

标签 ios objective-c memory memory-management lazy-loading

我在开发一个内容非常丰富的应用程序时遇到了问题。我正在使用 SDWebImage 将图像异步缓存和加载到我的 UIImageViews 和 UIButtons(如果适用)。在这个应用程序中,我有内容提要,它们是从服务器 URL 加载的 3 列宽图片的 Collection View 。

当我滚动时,内存像疯了一样累积,但在需要时会自行清除,这是 SDWebImage 的预期行为。但是,此应用程序是一个选项卡式应用程序,因此如果我部分滚动浏览一个提要,切换选项卡并滚动浏览另一个选项卡上的提要 - 内存只是建立而不会被清除。

我知道的第一个问题是图像尺寸非常大并且在应用程序内按比例缩小而不是以 100x100 PX 的正确尺寸下载,而是 640x640 像素。这显然会被修复,因为每个图像在整个应用程序中的各种显示都需要多种尺寸,这会降低 VM 的增长速度,但我不相信它会解决内存最终达到的潜在问题浏览不同页面时应用程序崩溃的关键点。

我注意到像 Wanelo、Path 和 Facebook 这样的应用程序都有无限的信息流,其中包含大量内容,可以无限期地滚动和加载,而不会在崩溃时造成任何明显的性能损失,他们是怎么做到的?

我还包含了一段视频,其中包含我使用工具中的分配模板分析我的应用程序的注释。我可以正常阅读信息,但我不确定在分配/调用堆栈等方面我是否遗漏了什么可能会引导我朝着正确的方向解决这个问题。

此处提供分析视频:http://youtu.be/J4zici41TMs

最佳答案

如果你看到 SDWebImage 是异步加载图像的最优化方式。您说您正在开发基于选项卡的应用,但有时您的应用会崩溃。

基本上 SDwebImage 下载图像并将它们保存在缓存内存中(以加快速度)并在本地保存图像。每当您从一个选项卡移动到另一个选项卡时,您都可以强制清除缓存。这可能对你有帮助。

当你切换到不同的标签时,试试下面的代码。

[[[SDWebImageManager sharedManager] imageCache] clearMemory];

此外,为了了解其他缓存 api,您可以检查这个。我将永远喜欢 SDWebImage,因为它真的又好又快。 link .

希望对您有所帮助。快乐编码:)

关于ios - SDWebImage 疯狂的内存增长,高虚拟内存?高脏内存大小。附视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24901070/

相关文章:

iphone - iPhone应用程序背景超时

iphone - 如何使用女声进行文字转语音?

iphone - PFQuery 排除特定列

php - 处理 JSON 数据获取的最理想方式

ios - SpriteKit : SKNode zRotation + Anti-Aliasing

c - 嵌入式设备的内存分配/释放

memory - Tensorflow:如何减少仅推理模型的内存占用?

android - 使用字符串删除SD卡android中的文件

iphone - 仅带 .@2x 的通用应用程序

ios - ld : building for iOS Simulator, 但链接到为 MacOSX 文件构建的 dylib