使用自动释放时,它什么时候实际发布?

时间:2010-10-31 01:56:09

标签: objective-c memory-management autorelease foundation

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

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

2 个答案:

答案 0 :(得分:5)

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

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

所以想一想 - 你的应用程序是事件驱动的。您可以获得发送给它的事件 - 并通过一系列功能处理它们。当每个函数返回,并且事件处理完毕后,将调用autorelease。

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

答案 1 :(得分:1)

From the iOS documentation

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