我担心问这个问题可能会导致一些反对,但是在进行了一些不令人满意的研究之后,我决定冒险并询问更有经验的人......
这里有很多问题涉及与 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
,返回错误保留计数的对象等)。
根据我的经验,它找不到几种类型的内存问题:
NSTimer
到 View Controller ,不知道计时器维护对 View Controller 的强引用,如果您不知道 invalidate
计时器(或在错误的地方做,例如 dealloc
方法), View Controller 和计时器都不会被释放。 malloc
和 free
),静态分析器的用途可能有限。每当您使用非引用计数代码(例如,您使用 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/