[英]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.