什么时候发布'autorelease'的对象?

时间:2009-07-18 02:55:20

标签: objective-c

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

- (void) test
{
    MyObj* p = [[[MyObj alloc] init] autorelease];
    ...

    // is p 'released' here?
}

一旦函数退出,或者当该线程的自动释放池被释放时,'p'就会被释放吗?我认为这是当本地函数退出时,但我刚刚创建了自己的线程,需要设置一个自动释放池,这让我想一想这实际发生的时间..

由于

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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