簡體   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