xcode - 什么样的内存泄漏 XCode Analyzer 可能不会注意到?

标签 xcode debugging memory-leaks analyzer

我担心问这个问题可能会导致一些反对,但是在进行了一些不令人满意的研究之后,我决定冒险并询问更有经验的人......

这里有很多问题涉及与 XCode Analayzer Tool 相关的一些特定问题。这似乎是非常有用的解决方案。但我想问你 - 作为 iOS 世界的初学者 - 这个工具不能注意到什么样的内存管理东西。

换句话说,是否有任何常见的内存管理方面,iOS 初学者应该思考“哦,小心点,因为在这种情况下,XCode Analyzer 可能不会警告你你的错误”......

例如,我在这里找到了 Why cannot XCode static analyzer detect un-released retained properties?那:

(...)the analyzer can't reliably detect retain/release issues across method/library boundaries(...)



这听起来是一个值得考虑的好提示,但也许您知道其他一些常见问题......

最佳答案

分析器非常擅长发现困扰新程序员编写非 ARC 代码的例程泄漏(未能调用 release ,返回错误保留计数的对象等)。

根据我的经验,它找不到几种类型的内存问题:

  • 一般不能识别strong reference cycles (又名 retain cycles)。例如,您添加一个重复的 NSTimer到 View Controller ,不知道计时器维护对 View Controller 的强引用,如果您不知道 invalidate计时器(或在错误的地方做,例如 dealloc 方法), View Controller 和计时器都不会被释放。
  • 它找不到循环逻辑错误。例如,如果您有一些循环引用,其中 View Controller A 呈现 View Controller B,而后者又呈现 A 的新副本(而不是关闭/弹出以返回 A)。
  • 它找不到许多非引用计数内存问题。虽然它在处理 Core Foundation 函数方面变得越来越好,但如果您有执行手动内存分配的代码(例如通过 mallocfree ),静态分析器的用途可能有限。每当您使用非引用计数代码(例如,您使用 SQLite sqlite3_prepare_v2 并且无法调用 sqlite3_finalize )时,情况也是如此。

  • 我确信这不是它没有找到的完整列表,但这些是我在 Stack Overflow 上看到的常见问题,静态分析器对这些问题的帮助有限。但是分析器仍然是一个很好的工具(它也可以发现内存问题以外的问题),对于那些不使用 ARC 的人来说,它是无价的。

    话虽如此,虽然静态分析器是被低估的第一道防线,但您确实应该使用 Instruments 来查找泄漏。见 Locating Memory Issues in Your App在仪器用户指南中。这是识别泄漏的最佳方法。

    关于xcode - 什么样的内存泄漏 XCode Analyzer 可能不会注意到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15293563/

    相关文章:

    xcode - 如何在 Xcode 4 中进行代码设计和沙箱助手应用程序?

    ios - Storyboard和 View Controller

    .net - Debug build 在调试和不调试的情况下运行有什么不同?

    c - 为什么指针数组的 free() 不释放内存?

    windows - 在 Delphi 7 中使用 WMI 内存泄漏

    ios - clang : error: linker command failed with exit code 1, Xcode 链接器错误

    ios - 选项和类型转换的错误

    C++:是否需要使用相同版本的 GCC 和 GDB 进行调试

    Javascript:如何单步站点初始化?

    c++ - 从 debugdiag 分析时 CreateErrorInfo 上的内存泄漏?