2013-10-27 72 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()永远不会返回,因此它们周围的自动释放池实际上从未释放。 –