有时我想知道什么时候会自动释放。我在各种对象的dealloc中添加了一个NSLog,但我找不到任何有用的东西。
使用自动释放时什么东西会释放?它是不可预测的,还是有一些额外的线程在运行?感谢。
答案 0 :(得分:5)
当“自动释放池到期”时。
这通常意味着,当堆栈被解开时。
所以想一想 - 你的应用程序是事件驱动的。您可以获得发送给它的事件 - 并通过一系列功能处理它们。当每个函数返回,并且事件处理完毕后,将调用autorelease。
这意味着当你自动释放它时,你可以指望一个对象仍然存活,并将它从一个函数返回给它的调用者。在处理任何类型的后续事件时,或者在现有堆栈帧之外调用时,不要指望它存在。
答案 1 :(得分:1)
Cocoa应用程序中的每个线程都维护着自己的NSAutoreleasePool对象堆栈。当一个线程终止时,它会自动释放与自身相关的所有自动释放池。