何时释放带有“自动释放”的对象?

Posted

技术标签:

【中文标题】何时释放带有“自动释放”的对象?【英文标题】:When is an object with 'autorelease' released? 【发布时间】:2009-07-18 02:55:19 【问题描述】:

我正在为 iPhone 开发,objective-c。当我们使用自动释放时,对象何时真正被释放——当主自动释放池被释放时(即应用程序终止?),还是本地函数结束时?例如,我想做这样的事情:

-(无效)测试 MyObj* p = [[[MyObj alloc] init] autorelease]; ... // p 在这里“释放”了吗?

那么 'p' 是在函数退出时立即释放,还是在该线程的自动释放池释放时释放?我以为是本地函数退出的时候,但我刚刚创建了自己的线程并需要设置一个自动释放池,这让我重新考虑何时真正发生这种情况..

谢谢

【问题讨论】:

【参考方案1】:

自动释放对象与自动释放池同时释放。因此,对于您的线程,它将在您释放池时被释放。在主线程中,如果您不创建自己的线程,我相信每次通过运行循环都会耗尽自动释放池 - 但我有一段时间没有看过了。

【讨论】:

这里是自动释放池页面的链接:developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/…【参考方案2】:

正如 Argothian 所说,它是在释放自动释放池时释放的,这在普通 Cocoa 应用程序中的运行循环中每次都会发生,不是在应用程序终止时(当然除非你不这样做有一个运行循环,在这种情况下你必须创建自动释放池,然后自己释放它)。自动释放池不知道每个单独的函数调用,因此无法在函数调用结束时释放内容。

【讨论】:

以上是关于何时释放带有“自动释放”的对象?的主要内容,如果未能解决你的问题,请参考以下文章

自动释放对象递减的保留计数何时减少?

如何找到带有自动释放消息的对象?

何时使用自动释放变量? [复制]

Objective-C 自动释放内存管理

详细说一下C#中using自动释放资源的用法

Objective-C 自动释放池不释放对象