繁体   English   中英

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

[英]If the UIApplicationMain() never returns then when does the autorelease pool gets released?

代码:

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?

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

至于argcargv的值,Apple文档说明如下:

NSApplicationMain本身忽略了argc和argv参数。 相反,Cocoa通过_NSGetArgv,_NSGetArgc和_NSGetEnviron间接获取其参数(参见[crt_externs.h])。

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

正如苹果文档所述:(在iOS部分“明确分配内存”部分)

使用autorelease方法释放的对象将保留在内存中,直到您明确地耗尽当前自动释放池或直到下一次事件循环为止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM