这里有很多问题涉及与XCode Analayzer工具相关的一些特定问题.这似乎是非常有用的解决方案.但我想问你 – 作为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(…)
这听起来像是一个很好的提示,但也许你知道其他一些常见问题……
解决方法
根据我的经验,它找不到几种类型的内存问题:
>一般不能识别@L_301_1@(a.k.a. retain cycles).例如,您向视图控制器添加重复的NSTimer,不知道计时器维护对视图控制器的强引用,并且如果您没有使计时器无效(或者在错误的位置执行,例如dealloc方法),视图控制器和计时器都不会被释放.
>它无法找到循环逻辑错误.例如,如果您有一些循环引用,其中视图控制器A呈现视图控制器B,而视图控制器B又呈现A的新副本(而不是解除/弹出以返回到A).
>它找不到很多非引用计数内存问题.虽然它在处理Core Foundation功能方面越来越好,但如果您的代码正在进行手动内存分配(例如通过malloc和free),则静态分析器的使用可能有限.每当您使用非引用计数代码时也是如此(例如,您使用sqlite sqlite3_prepare_v2并且无法调用sqlite3_finalize).
我确定这不是一个完整的未找到的列表,但这些是我在Stack Overflow上看到的常见问题,静态分析器对它的帮助有限.但是分析仪仍然是一个很棒的工具(它也会发现除了内存问题之外的其他问题),对于那些不使用ARC的人来说,这是非常宝贵的.
话虽如此,虽然静态分析仪是一个不受重视的第一道防线,但你真的应该使用仪器来发现泄漏.请参阅“仪器用户指南”中的Locating Memory Issues in Your App.这是识别泄漏的最佳方法.