【发布时间】:2010-10-31 01:56:09
【问题描述】:
有时我想知道什么时候会自动发布。我在各种对象的dealloc中添加了一个NSLog,但是找不到有用的东西。
使用自动释放时,什么时候释放?它是不可预测的,还是有一些额外的线程在运行?谢谢。
【问题讨论】:
标签: objective-c memory-management autorelease foundation
有时我想知道什么时候会自动发布。我在各种对象的dealloc中添加了一个NSLog,但是找不到有用的东西。
使用自动释放时,什么时候释放?它是不可预测的,还是有一些额外的线程在运行?谢谢。
【问题讨论】:
标签: objective-c memory-management autorelease foundation
当“自动释放池过期”时。
这通常意味着,当堆栈展开时。
所以这样想吧 - 您的应用是事件驱动的。您会收到发送给它的事件 - 它们通过一系列函数进行处理。当每个函数返回,并且事件处理完毕后,将调用 autorelease。
这意味着当你自动释放一个对象时,你可以指望它仍然活着,并将它从一个函数返回给它的调用者。在处理任何类型的后续事件或在现有堆栈框架之外调用时,不要期望它会出现。
【讨论】:
Cocoa 应用程序中的每个线程都维护自己的 NSAutoreleasePool 对象堆栈。当一个线程终止时,它会自动释放与其关联的所有自动释放池。
【讨论】: