如果UIApplicationMain()永远不会返回,那么自动释放池何时被释放?

时间:2010-04-23 23:32:29

标签: iphone cocoa

代码:

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

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

Apple的文档明确指出:

  

返回值:   即使指定了整数返回类型,此函数也不会返回。当用户通过按Home键终止iPhone应用程序时,应用程序会立即通过调用退出系统函数退出,参数为零。

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

至于argcargv Apple文档的值如下:

  

NSApplicationMain本身忽略了   argc和argv参数。代替,   Cocoa间接得到了它的论据   通过_NSGetArgv,_NSGetArgc和   _NSGetEnviron(见[crt_externs.h])。g

答案 2 :(得分:1)

autorelease池可能不会被释放,但UIApplicationMain有一个事件处理程序循环,在每个事件之后将其排出。

正如Apple文档所述:(在iOS部分“明确分配内存”一节中)

  

使用自动释放释放的对象   方法留在记忆中直到你   明确地消耗电流   自动释放池或直到下一个   事件循环的时间。