我是iOS 5和ARC的新手,请原谅我的愚蠢问题。自动参考计数(ARC)对内存泄漏的影响
如果我们在项目中使用ARC,是否意味着不会有任何内存泄漏。
如果我们使用ARC,是否需要使用仪器检测内存泄漏和NSZombies?
我是iOS 5和ARC的新手,请原谅我的愚蠢问题。自动参考计数(ARC)对内存泄漏的影响
如果我们在项目中使用ARC,是否意味着不会有任何内存泄漏。
如果我们使用ARC,是否需要使用仪器检测内存泄漏和NSZombies?
ARC将帮助您消除某些类型的泄漏,因为您不会忘记release
或autorelease
单个对象。例如,这种类型的错误变得不可能:
myLabel.text = [[NSString alloc] initWithFormat:@"%d", 17];
// oops, just leaked that NSString!
然而,ARC不会消除由保持周期泄漏。消除保留周期仍然取决于您,或者使用弱引用,或者在泄漏之前手动中断循环。例如,当我们开始更多地使用块时,块/自我保留周期变得更加普遍。 Transitioning to ARC Release Notes讨论如何使用弱引用来避免这些循环。
如果您想了解ARC,我强烈建议您从[WWDC 2011](https://developer.apple.com/videos/wwdc/2011/)上的“介绍自动引用计数”视频。 –
我能做什么这样的问题的情况下http://stackoverflow.com/questions/21423309/memory-leak-in-nsstring-stringwithutf8string-with-arc-enabled – deltaaruna
不,这并不能防止内存泄漏的发生。运行时引用计数会发生什么情况,有时您的代码会留下悬而未决的引用,然后对象不会被释放。编写好的代码仍然取决于你。
好的。那么同样的事情也适用于NSZombies? – meetpd
如果我们在我们的项目中使用ARC,是否意味着不会有任何内存泄漏。
可能仍有泄漏 - 在您的程序和您使用的库中。此外,ARC仅适用于ObjC对象 - 您可以轻松地泄漏任何不是objc对象的堆分配(例如,malloc
/new
)。
如果我们使用ARC,是否需要使用仪器检测内存泄漏和NSZombies?
是的。以前的回复应该详细说明为什么你的程序不能保证没有这些问题。另外,如果你做了愚蠢的事情,编译器可能会错误,如果不能正确保护你的数据(例如并发执行),你肯定会导致问题。
不,ARC不会完全消除内存泄漏。参见[Objective-C的自动引用计数(在Xcode 4.2中)不会阻止/最小化是什么样的漏洞?](http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-objective-cs - xcode-4-2中的自动引用计数) – BoltClock