使用自动释放时,它实际上是啥时候释放的?
Posted
技术标签:
【中文标题】使用自动释放时,它实际上是啥时候释放的?【英文标题】:When using autorelease, when is it actually released?使用自动释放时,它实际上是什么时候释放的? 【发布时间】:2010-10-31 01:56:09 【问题描述】:有时我想知道什么时候会自动发布。我在各种对象的dealloc中添加了一个NSLog,但是找不到有用的东西。
使用自动释放时,什么时候释放?它是不可预测的,还是有一些额外的线程在运行?谢谢。
【问题讨论】:
【参考方案1】:当“自动释放池过期”时。
这通常意味着,当堆栈展开时。
所以这样想吧 - 您的应用是事件驱动的。您会收到发送给它的事件 - 它们通过一系列函数进行处理。当每个函数返回,并且事件处理完毕后,将调用 autorelease。
这意味着当你自动释放一个对象时,你可以指望它仍然活着,并将它从一个函数返回给它的调用者。在处理任何类型的后续事件或在现有堆栈框架之外调用时,不要期望它会出现。
【讨论】:
【参考方案2】:From the ios documentation
Cocoa 应用程序中的每个线程都维护自己的 NSAutoreleasePool 对象堆栈。当一个线程终止时,它会自动释放与其关联的所有自动释放池。
【讨论】:
以上是关于使用自动释放时,它实际上是啥时候释放的?的主要内容,如果未能解决你的问题,请参考以下文章