我是iOS 5和ARC的新手,所以原谅我的愚蠢问题。
如果我们在项目中使用ARC,是否意味着根本不存在任何内存泄漏。
如果我们使用ARC,是否需要使用Instruments检测内存泄漏和NSZombies?
答案 0 :(得分:5)
ARC将帮助您消除某些类型的泄漏,因为您不会忘记release
或autorelease
单个对象。例如,这种类型的错误变得不可能:
myLabel.text = [[NSString alloc] initWithFormat:@"%d", 17];
// oops, just leaked that NSString!
但是,ARC不会消除保留周期造成的泄漏。您仍然可以通过使用弱引用或在泄漏之前手动中断循环来消除保留周期。例如,当我们开始更多地使用块时,块/自保持周期变得更加常见。 Transitioning to ARC Release Notes讨论如何使用弱引用来避免这些循环。
答案 1 :(得分:0)
不,这不会阻止内存泄漏的发生。在引用计数的运行时中发生的情况是,有时您的代码会留下悬空引用,然后对象不会被释放。编写好的代码仍然取决于你。
答案 2 :(得分:0)
如果我们在项目中使用ARC,是否意味着根本不存在任何内存泄漏。
可能仍然存在泄漏 - 在您的程序中以及您使用的库中。同样,ARC仅适用于ObjC对象 - 您可以轻松泄漏任何不是objc对象的堆分配(例如malloc
/ new
)。
如果我们使用ARC,是否需要使用Instruments检测内存泄漏和NSZombies?
是。之前的回复应详细说明为什么您的程序不能保证不存在这些问题。此外,如果您做了愚蠢的事情,编译器可能会弄错,如果不能正确保护您的数据(例如并发执行),您肯定会导致问题。