【问题标题】:Leaks on the phone but not on the emulator?在手机上泄漏但在模拟器上没有?
【发布时间】:2011-03-29 06:10:18
【问题描述】:

大家好,我有一个问题,我想要一些建议。

我正在开发一个由以下主要部分组成的文档查看器:

  1. 解压文档容器的zip库(minizip)
  2. 解析文档的xml库(libxml2)
  3. 在屏幕上呈现文档的 UI 代码

没有太复杂或花哨的东西。

在模拟器上,一切正常;查看器按预期执行。我已经通过仪器运行它并且没有泄漏。 ObjectAlloc 报告在查看器的整个生命周期内分配了大约 5.5 megs(这就是一遍又一遍地打开我的测试文档)。

不幸的是,在设备(iphone 3G、iOS 3.1.2)上,事情并不那么清楚。相当频繁地,重复打开测试文件会导致内存不足错误,并且文件将无法打开。初始文件打开始终有效。尽管模拟器测试强调没有泄漏并且整体内存占用量不大,但我不得不得出结论,iphone 确实存在泄漏(因为为什么重复打开会导致内存不足错误)。

我尝试在设备上运行仪器,但应用程序在运行中途停止(?!),所以我实际上没有成功运行 Leaks。

我认为某处存在重大泄漏,仅显示在设备上。所以,我有两个选择(不分先后):

  • 重构我的代码以避免使用 zip 库。这将消除潜在的泄漏源。耗时且不确定。
  • 重新格式化并重新安装我手机上的所有内容(也许那里有什么问题)。和上面差不多,很费时间,而且很糟糕,丢失了我的手机数据。也许它会让我运行 Leaks。

如您所见,我到达了这里。我有什么明显的遗漏吗?

提前谢谢各位。

【问题讨论】:

    标签: iphone memory-management memory-leaks debugging instruments


    【解决方案1】:

    也许,您应该尝试在您的设备上运行的不是 Leaks,而是 Allocations Instrument,并使用它(手动)搜索泄漏?

    +(也许这听起来很愚蠢)从设备中删除应用程序并重复 Clean-Build-Run with Leaks(为什么不呢?)。


    关于手动泄漏搜索。

    只需启动 Allocations Instrument,并在使用您的应用时,多次执行每个操作(例如 - 按两次或更多次按钮;导航到某个面板并返回几次 - 等等)。内存应该只显着增加一次,或者在动作开始时增加,在动作结束时减少(当然,有些分歧是可能的,但它们应该在少量内存中反映出来)。你会在图表上看到它。

    还制作堆(在仪器上的左侧面板上选择了分配仪器,有一个按钮为此) - 它们将帮助您检测被认为被销毁的“仍然存在”的对象(将有很多对象,但第一步也是最简单的一步是检查您自己的类的对象)。

    【讨论】:

    • 你的意思是“ObjectAlloc”吗?手动搜索它们是什么意思?感谢您的建议!
    • 嗯,我想是的。但是在我的仪器(在仪器选择菜单中)和我的 XCode(主菜单:运行 -> 使用性能工具运行)中,它被称为“分配”。关于手动搜索 - 请参阅我的答案(我对其进行了编辑以添加详细信息)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2013-06-07
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    相关资源
    最近更新 更多