我是iOS 5和ARC的新手,所以请原谅我这个愚蠢的问题。
如果我们在我们的项目中使用ARC,是否意味着根本不会有任何内存泄漏。
如果我们使用ARC,是否需要使用工具来检测内存泄漏和NSZombies?
发布于 2012-01-21 14:04:25
ARC将帮助您消除某些类型的泄漏,因为您不会忘记release或autorelease单个对象。例如,这种类型的错误变得不可能:
myLabel.text = [[NSString alloc] initWithFormat:@"%d", 17];
// oops, just leaked that NSString!然而,ARC不会消除由保留周期引起的泄漏。消除保留循环仍然取决于您,要么使用弱引用,要么在循环泄漏之前手动中断它们。例如,随着我们开始更多地使用块,块/自保留周期变得更加常见。讨论了如何使用弱引用来避免这些循环。
发布于 2012-01-21 13:49:08
不,这并不能阻止内存泄漏的发生。引用计数在运行时发生的情况是,有时代码会留下悬空的引用,然后对象就不会被释放。写出好的代码仍然取决于你。
发布于 2012-01-21 14:53:46
如果我们在我们的项目中使用ARC,这是否意味着根本不会有任何内存泄漏。
在您的程序和您使用的库中,仍然可能存在泄漏。同样,ARC只适用于ObjC对象--你很容易泄漏任何不是objc对象的堆分配(例如malloc/new)。
如果我们使用ARC,是否需要使用工具来检测内存泄漏和NSZombies?
是。前面的回复应该详细说明为什么你的程序不能保证没有这些问题。此外,如果你做了一些愚蠢的事情,编译器可能会出错,如果你没有适当地保护你的数据(例如,并发执行),你肯定会导致问题。
https://stackoverflow.com/questions/8950989
复制相似问题