何时释放带有“自动释放”的对象?
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 应用程序中的运行循环中每次都会发生,不是在应用程序终止时(当然除非你不这样做有一个运行循环,在这种情况下你必须创建自动释放池,然后自己释放它)。自动释放池不知道每个单独的函数调用,因此无法在函数调用结束时释放内容。
【讨论】:
以上是关于何时释放带有“自动释放”的对象?的主要内容,如果未能解决你的问题,请参考以下文章