XCode Analyzer可能没有注意到哪种内存泄漏?

我担心提出这个问题可能会导致一些问题,但在做了一些不令人满意的研究后,我决定承担风险并要求更有经验的人……

这里有很多问题涉及与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(…)

这听起来像是一个很好的提示,但也许你知道其他一些常见问题……

解决方法

分析器非常擅长找到困扰新程序员编写非ARC代码的常规泄漏(无法调用release,返回错误保留计数的对象等).

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

>一般不能识别strong reference cycles(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.这是识别泄漏的最佳方法.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...