1

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

4

1 回答 1

6

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

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

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

于 2013-07-08T16:45:34.913 回答