Obj-C:检查内存泄漏 - 如何知道Cocoa对象何时从内存中删除

时间:2013-07-08 16:37:39

标签: objective-c memory-management memory-leaks

什么是检查Cocoa类在ARC下取消分配的最快方法,在我想要检查内存问题时在我自己的类中,我在- (void) dealloc;方法中放置了一个NSLog,所以我知道它何时出现释放。但对于像NSArray这样的Obj-C类,我怎么知道它何时被解除分配?如果我将类设置为nil,那么使用ARC也会自动从内存中删除它吗?

1 个答案:

答案 0 :(得分:6)

您可以使用仪器中的分配工具找出何时(任何类)取消分配类。这是更好的方法。但是,仍然可以覆盖dealloc并在ARC下记录消息。不同之处在于,当您覆盖dealloc时,您无法调用[super dealloc](编译器会为您处理)。

如果您遇到因向已解除分配的实例发送消息而导致的问题,请使用仪器中的Zombies仪器。它会告诉您何时向已释放的对象发送消息,允许您查看有问题的调用堆栈,以及消息对象的分配/保留/释放/ dealloc历史记录。

在ARC下,你不应该像所有权语义那样考虑确切的对象生命周期。也就是说,当您在ARC下将强变量设置为nil时,将释放引用的对象。它是否被解除分配(即“从内存中删除[s]”)取决于是否有任何其他对象具有强引用。此外,如果它在任何自动释放池中,则在池消耗之前不会释放它(在ARC和MRC下都是如此)。同样,使用Allocations工具可以发现任何特定情况下发生的细节。