【问题标题】:UIImageView UIKit setImageWithURL memory usageUIImageView UIKit setImageWithURL 内存使用情况
【发布时间】:2014-12-19 21:13:45
【问题描述】:

尝试调试我的应用程序,但我的内存不断增加。

我有一个使用 AFNetworking 从 Web 服务中提取 JSON 的应用程序。我使用 UIKit + AFNetworking 加载我从 UIImageView 中的 JSON 获得的 URL 字符串,这些字符串位于自定义 XIB 表格单元格中。我用setImageForURL

当我加载新的 JSON 并因此加载新的图像 URL 时,我的内存使用量每次会增加 2-7 mb。旧图像在 UI 中被新图像替换。实时内存使用量不断上升。我查看了保存 JSON 等的数组 - 没有泄漏。

我怀疑正在进行一些图像缓存,但在将 UIImageView 与setImageWithURL 一起使用时,我从未见过任何有关图像缓存的信息。不过,我已经看到使用 imageNamed 的内存问题。

setImageWithURL 是否存在与imageNamed 相同的内存问题?

【问题讨论】:

    标签: ios objective-c memory uiimageview


    【解决方案1】:

    setImageWithURL: 来自 AFNetworking 处理使用此方法下载的图像的缓存。下次您为相同的 URL 调用它时,它将首先检查缓存以查看图像是否已缓存(因此无需再次访问网络)。

    来自 AFNetworking API:

    从指定的 URL 异步下载图像,并设置它 一旦请求完成。之前的任何图像请求 接收器将被取消。如果图像在本地缓存,则 立即设置图像,否则指定占位符图像 将立即设置,然后远程图像将设置一次 请求完成。默认情况下,URL 请求有一个Accept “image/*”的头域值,缓存策略为 NSURLCacheStorageAllowed 和 30 秒的超时间隔,以及 设置为不处理 cookie。要以不同方式配置 URL 请求,请使用 setImageWithURLRequest:placeholderImage:success:failure:

    所以确实存在缓存,因此使用了内存。

    希望对你有帮助。

    【讨论】:

    • 所以这会让我的应用程序占用内存?根据您的经验,Apple 会拒绝这些类型的应用吗?
    • @noobsmcgoobs 这里的问题不在于苹果会做什么;为什么要使用 AFNetworking 下载图像?你需要缓存它吗?该应用程序使用了如此多的内存,因此图像必须很大,所以我猜它们不在 tableView 中。给我们一些背景信息,我们最终可能会找到解决方案。
    • 用户获取基于位置的图像,如果他们移动到新位置,可以使用新图像刷新表格视图。旧媒体不会以任何方式持续存在。 EG - 我在 SF 中加载位置媒体,然后去纽约刷新; SF 媒体在 tableView 中被 NYC 媒体替换。 SF 媒体不会以任何方式持久化。 AFNetworking 是我进行 API 调用的方式,它返回 JSON。我使用 AF 的 UIImageView 方法 setImageWithURL 将媒体 URL 加载到 UIImageView 中。
    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-05-30
    • 2021-02-26
    相关资源
    最近更新 更多