2010-04-23 51 views
3

下面的代码:如果UIApplicationMain()永远不会返回,那么autorelease池何时被释放?

int main(int argc, char *argv[]) { 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

苹果的doc明确规定:

返回值: 即使被指定的整数返回类型,这个函数永远不会返回。当用户通过按下Home按钮来终止一个iPhone应用程序时,应用程序立即通过调用带有零参数的退出系统函数退出。

其次,在 int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName ); 我们如何可以访问我们的UIApplication子类中的argv?

+0

为什么要访问'argv'? – shosti 2010-04-24 04:23:14

回答

8

该自动释放池不会获得释放。相反,操作系统只是从内存中删除你的应用程序。

+1

另外,请注意NSAutoreleasePools可能是嵌套的。这种嵌套池在每个事件处理程序中创建。在应用程序代码中自动释放的内存很可能会被应用程序正常行为期间耗尽的嵌套池之一捕获。 – 2010-04-24 04:32:21

3

至于argcargv苹果文档的值规定如下:

NSApplicationMain本身忽略 argc和argv参数。相反, 可可通过_NSGetArgv,_NSGetArgc间接 获取它的参数,并 _NSGetEnviron(见[crt_externs.h])例

1

主要autorelease池可能无法得到释放,但UIApplicationMain有一个事件处理循环在每次事件之后将其排空。

苹果文档状态:(根据第iOS的部分“分配内存明智”)使用自动释放 方法留在内存中,直至 明确地漏电流 自动释放池或直到下一个发布

对象 您的事件循环周围。

相关问题