ImageIO脏内存不会被iOS自动清除

2024-01-10

我正在创建一个应用程序,它是一种画廊 - 它作为全屏查看器显示不同的媒体内容。分配工具显示,使用应用程序时,Live Bytes 参数不会增长到高于 40 Mb。同时,在我滑动页面 20-30 次后,该应用程序 100% 被杀死。 我检查了 Dirty Memory 参数,发现它比 Live Bytes 大小大 10 倍。 大部分脏内存消耗了 Image IO:

编辑,另一个屏幕截图:

上面的分配峰值是切换视频/图像媒体内容。 问题是脏内存几乎线性增长,我需要以某种方式释放它。

现在谈谈应用程序设计。 应用程序屏幕有一个水平滚动视图。滚动视图包含视频或包含多个图像的拼贴对象。为了节省内存,一次仅创建三个页面 - 当前页面和左/右页面。因此,当滑动滚动视图时,页面总是动态创建和删除。

我加载的所有图像都使用[UIImage imageWithContentOfFile: path]方法。 Collage 对象将 UIImage 实例存储在 imagesArray 中。在 dealloc 方法中,imagesArray 属性被清除。

那么,问题:

  • 这是一种系统错误吗[UIImage imageWithContentOfFile?]
  • 是图像IO缓存吗?
  • 我可以清除它吗?

把这个放在这里太大了,无法发表评论,只是一些想法:

1)错误地保留对象的一种方法是将对象隐藏在视图中,但未从其超级视图中删除(因此保持保留状态)

2)如果你在任何线程而不是主线程上对 UIImageView 等做任何事情,就会发生不好的事情(像这样)

3)复制你的项目,这样你就可以自由地修改它,并尝试一些事情:

  • 不要加载多个图像,而是始终加载相同的图像,但保留代码的其他部分不变 - 情况会发生变化吗?

  • 在您创建的任何保存/保留图像的子类中,在 dealloc 中放置一条日志消息,以查看这些对象实际上是否正在被释放。

  • 子类 UIImageView,将其用于图像,并记录 dealloc

  • 子类 UIImage,将其用于这些图像,记录 dealloc

4)我很难相信 imageio 有一个缺陷可以做到这一点,但你可以做的是切换到使用 imageWithData,并自己加载数据。当您实际读取数据时,请使用 F_NOCACHE 标志 - 还有其他关于如何执行此操作的代码,您可以搜索它(我回答了一个关于它的问题)。

如果您可以创建一个具有此缺陷的演示项目,那么调试它会比仅仅猜测要做什么容易得多。记录被释放的类会大有帮助,因为您将立即看到哪些内容没有被释放,然后更好地关注问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ImageIO脏内存不会被iOS自动清除 的相关文章

  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 在 Swift 中从 Parse 加载图像

    我成功地将数据从 Parse 提取到 swift 中 但我的图像似乎没有按照我的方式工作 在我的 cellForRowAtIndexPath 方法中 我执行以下操作 var event AnyObject eventContainerArr
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • 如何在 Swift 中“生成”闭包类型别名?

    为了使我的代码更易于阅读 我在 Swift 中对各种类型的闭包使用类型别名 我有以下基本的闭包集 public typealias FailureClosure error NSError gt Void public typealias
  • 在 Swift 中有条件导入基于 iOS 版本的框架(如 Speech)?

    有没有办法有条件地导入框架Swift基于运行时 iOS 版本 特别是 我有一个部署目标为的应用程序iOS 8 我想使用新的Apple Speech应用程序中的框架 如果在运行时可用 我知道 available iOS 10 代码部分的指令
  • iOS 9.3 中的 KVO 被破坏

    这可能是 iOS 9 3 发行版 中的一个可怕的错误 添加单个观察者时 NSUserDefaults standardUserDefaults 我注意到响应方法 observeValueForKeyPath ofObject change
  • SwiftUI DisclosureGroup 单独展开每个部分

    我正在使用 Foreach 和 DisclosureGroup 来显示数据 每个部分都可以展开 折叠 然而 它们都在同时扩展 折叠 如何单独展开 折叠每个部分 struct TasksTabView View State private v
  • ios如何搜索目录

    我想知道如何检查我的应用程序中是否存在目录 例如 如果我想搜索我的应用程序文档中是否存在文件夹 以及如何在其中创建新文件夹 此致 检查文件是否存在 BOOL fileExistsAtAbsolutePath NSString filenam
  • 如何在气隙 Mac 上安装新的 Apple 全球开发者关系中级证书?

    您可能知道也可能不知道 现在使用新的中间证书生成新的签名证书 你可以在这里读到它 https developer apple com support wwdr intermediate certificate https developer
  • iOS9 Sprite 套件问题

    一切都很顺利 直到我升级到 xCode 7 和 iOS 9 我当前的项目是一个 2D 平台游戏 自从升级以来 我就陷入了我们许多人似乎都面临的精灵套件错误 错误的困扰 我的问题是 每次游戏在模拟器或设备上运行时 所有精灵的 zPositio
  • 如何在 Alamofire 中使用“responseDecodable”方法?

    I have been trying to use responseDecodable method from Alamofire but I m getting Generic parameter T could not be infer
  • 如何在 iOS 中创建多行表格单元格?

    如何让第二个单元格扩展以适合文本而不是缩放文本 iOS 中有内置的方法可以做到这一点 还是我必须想出一些自制的解决方案 如果您查看 iOS 联系人应用程序 会发现有一个类似地址的框 但我找不到如何实现这一点 对于任何希望将来实现这一目标的人
  • 如何在javascript中计算日出和日落?

    我正在使用appcelerator titan开发一个IOS应用程序 我想让我的应用程序在日出和日落时向用户发送本地通知 解决这个问题的一个好工具是使用 YQL 的雅虎天气 但是 雅虎天气仅供非商业用途 我正在尝试找到一个javascrip
  • iOS UITableView:使用 CAGradientLayer 将背景颜色指定为渐变

    我刚刚开始使用 Xcode 4 3 中的主从视图模板 我试图更改主视图的背景颜色并将其设置为颜色渐变 这是我尝试过的 Colors m import Colors h implementation Colors UIColor naviga
  • 在 XCode 中本地化 HTML 文件

    我有一个本地化的 iOS 应用程序 我希望在其中包含一些本地化的 HTML 文件 我不知道该怎么做 目前 我的文件夹结构如下所示 myapp en lrproj Localizable strings fr lrproj Localizab
  • XOR或其他简单的文件混淆方法ios目标c

    我正在开发一个使用受版权保护的 pdf 文件的 ios 应用程序 我正在寻找一些简单的方法来混淆文件以确保安全 这些方法不需要我经历额外的大众市场 CCATS 加密审查流程 但也将确保版权所有者已尽我所能来保证他们的数据安全 当然 我用密码
  • 为什么我收到 com.facebook.sdk.login 错误 308?

    我正在使用 Xcode 7 0 在 iOS 9 0 2 上进行测试并使用 Facebook SDK 4 7 0 当我登录用户时 大多数时候一切都正常 但有时我不断收到此错误 但我不知道为什么 操作无法完成 com facebook sdk

随机推荐