1

有时我想知道什么时候会自动发布。我在各种对象的dealloc中添加了一个NSLog,但我找不到任何有用的东西。

使用自动释放时什么时候释放?它是不可预测的,还是有一些额外的线程在运行?谢谢。

4

2 回答 2

5

当“自动释放池过期”时。

这通常意味着,当堆栈展开时。

所以这样想 - 你的应用程序是事件驱动的。您会收到发送给它的事件 - 它们通过一系列函数进行处理。当每个函数返回,并且事件处理完毕时,将调用 autorelease。

这意味着您可以指望一个对象在您自动释放它时仍然活着,并将它从函数返回给它的调用者。在处理任何类型的后续事件或在现有堆栈框架之外调用时,不要期望它会出现。

于 2010-10-31T02:00:29.543 回答
1

来自 iOS 文档

Cocoa 应用程序中的每个线程都维护自己的 NSAutoreleasePool 对象堆栈。当一个线程终止时,它会自动释放与其关联的所有自动释放池。

于 2010-10-31T05:12:41.287 回答