【问题标题】:Help finding memory leaks (general tips)帮助查找内存泄漏(一般提示)
【发布时间】:2011-06-10 20:42:20
【问题描述】:

这是在 iOS 上,设备是 iPad。

会发生什么:

  1. 我在设备上运行应用程序或使用 Xcode 调试和运行。
  2. 5 分钟后,我收到 1 级内存警告。
  3. 一分钟后,我收到 2 级内存警告。
  4. 又过了一分钟,Program received signal: “0”.

我使用 Leaks in Instruments 检查了泄漏,并且未检测到泄漏。 但是,根据 Activity Monitor,我的应用程序最初使用 30 MB,并且随着时间的推移会增长到超过 100 MB(大约每秒 200 kb!)。所以,显然 Leaks 并没有检测到所有的内存泄漏。

所以我的问题是:如果 Leaks 无法检测到它,是否有任何查找它们的一般提示,是否有更好的工具来查找这些泄漏?

【问题讨论】:

    标签: xcode ios memory-leaks instruments


    【解决方案1】:

    这就是我的处理方式,

    1. 用前缀命名所有类,以便在 Instruments 中轻松查看它们

    2. XCode->运行->使用性能工具运行->分配

    现在停止您的应用并在搜索框中输入您怀疑泄漏的课程名称。 (这是前缀很方便的地方)。使用“记录”按钮再次启动仪器

    1. 在分配对象时,活动列应该上下移动。请注意,如果它没有关闭,则说明您有泄漏。

    【讨论】:

    • 虽然我仍然找不到我的泄漏/废弃内存,但这似乎是一个有用的方法。
    • @hyn,您的课程可能会保留数据并且没有泄漏。您可能会查看自动释放池并将内存密集型代码块包装在 NSAutoReleasePool 中,并在有意义时调用 [pool drain]
    【解决方案2】:

    在您提到的情况下,您始终没有必要存在泄漏。您可能在此处提到的执行时间点使用了许多自动释放的对象。 您可能正在向集合对象添加大尺寸的对象。如果是这种情况,请为这种情况使用单独的自动释放池,减少应用程序的内存占用。

    【讨论】:

      【解决方案3】:

      如果您可以使用工具来查找泄漏是首选,但如果完全被难住了,我会使用另一种技术。

      从注释掉几乎所有内容开始,然后慢慢地一次添加一个组件,直到再次发生内存泄漏。这样,您就可以将导致问题的函数或代码块归零。

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 2020-10-11
        • 2011-01-14
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多