【问题标题】:How to exactly find where memory is leaking in project of iPhone如何准确找到 iPhone 项目中内存泄漏的位置
【发布时间】:2012-05-16 15:11:45
【问题描述】:

在 Xcode 中开发应用时,内存泄漏正在发生。当我在扩展详细视图中检查它们时,它们显示了与实现无关的不同方法。如何准确找出正在泄漏的对象以及泄漏内存的位置。

启用 ARC 后,我们是否必须处理内存泄漏?

【问题讨论】:

    标签: iphone ios ios4 iphone-sdk-3.0


    【解决方案1】:

    即使ARC 可能会发生内存泄漏,它只是在编译时插入释放和自动释放。

    1. 您必须在 XCode 中使用 Build and analyze 检查泄漏,shift+command+b 您应该清除这些问题。

    2. 之后,您可以使用配置文件选项command+i 开始使用仪器。这将指向您可能泄漏的位置。

    这个链接也会对你有所帮助http://soulwithmobiletechnology.blogspot.in/2011/04/how-to-check-memory-leaks-in-xcode-4.html

    编辑:添加了一些屏幕截图,希望能更清楚。

    在选择leaks 后进行分析时,选择call tree 选项并选中hide system librariesinvert call treeshow obj-c only 复选框,如下图所示。

    双击下面的符号名称后,您将看到泄漏的行。

    你会得到这样的东西。

    【讨论】:

    • 只是一个小点,它不会“告诉您泄漏的确切位置”,您可能会很幸运并告诉您,但通常它指出泄漏的位置可能是。
    • 一切正常..但是当我看到扩展的详细视图时,该视图中的方法与任何项目方法都不匹配
    • @SAHARA,您尝试过教程吗?红色通常指向泄漏的物体。您可以通过双击在代码中查看该行。
    • 但是当我双击它时......它正在打开地址而不是项目中的泄漏行
    • @SAHARA,请检查我的编辑,希望它能让事情更清楚。
    【解决方案2】:

    是的,即使 使用 ARC 也存在内存泄漏。 ARC 不是垃圾收集器,它只在编译时为您插入、保留、释放和自动释放关键位置。因此,尽管它确实对开发人员有所帮助,但您应该知道内存泄漏仍然存在(例如循环引用)。您可以先使用 Static Analyzer 并纠正它显示给您的任何问题。然后您可以转到仪器并选择泄漏

    【讨论】:

    • 当然,您仍然必须手动管理非objective-c 对象(C 或C++)的内存。另一个领域是忘记使运行循环中的重复计时器或其他保留对象无效(不是明显的泄漏)。
    • @JackyBoy:你能告诉我ARC没有处理内存泄漏的确切位置吗?
    • 例如,@MadanMohan 保留周期。 stackoverflow.com/questions/7761074/…
    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2010-11-23
    相关资源
    最近更新 更多