2013-10-27 102 views
2

我不明白爲什麼我們需要外部自動釋放池(大約UIApplicationMain和內部NSApplicationMain)。無論如何,當進程終止時,是否所有分配的內存都不會被釋放?外部自動釋放池

例如,如果我只是這樣做:

@import Foundation; 

int main(int argc, const char *argv[]) { 
    for (NSUInteger i = 0; i < NSUIntegerMax; i++) { 
     NSArray *anArray = [NSArray array]; 
    } 

    return EXIT_SUCCESS; 
} 

回答

3

這是一個框架不變。該框架取決於autorelease池的存在。如果沒有自動釋放池,您的程序會將錯誤發送到日誌。該程序仍然可能運行,內存仍然會在退出時被釋放,但框架仍然希望在那裏有一個可供調用的池。

-1

你是正確的,所有的記憶都會得到釋放進程退出時。但是自動釋放池的關鍵在於,內存在之前被釋放。 (在你的例子中,你是「放棄」內存 - 分配,然後忘記分配。)否則,你只是在內存泄漏,直到系統不能再分配給進程,在這種情況下,進程被終止。

+0

NSApplicationMain()和UIApplicationMain()永遠不會返回,因此它們周圍的自動釋放池實際上從未釋放。 –