[英]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?
自动释放池不会被释放。 相反,操作系统只是从内存中删除您的应用程序。
至于argc
和argv
的值,Apple文档说明如下:
NSApplicationMain本身忽略了argc和argv参数。 相反,Cocoa通过_NSGetArgv,_NSGetArgc和_NSGetEnviron间接获取其参数(参见[crt_externs.h])。
主autorelease
池可能不会被释放,但UIApplicationMain
有一个事件处理程序循环,在每个事件之后将其排出。
正如苹果文档所述:(在iOS部分“明确分配内存”部分)
使用autorelease方法释放的对象将保留在内存中,直到您明确地耗尽当前自动释放池或直到下一次事件循环为止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.