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;
}
4

2 回答 2

3

这是一个框架不变量。该框架依赖于自动释放池的存在。如果没有自动释放池,您的程序会将错误信息发送到日志中。程序可能仍会运行,并且内存仍将在退出时释放,但框架仍希望有一个适当的池供其调用。

于 2013-10-27T19:15:39.913 回答
-1

你是对的,当进程退出时,所有内存都会被释放。但是自动释放池的重点是在此之前释放内存。(在您的示例中,您正在“放弃”内存 - 分配然后忘记分配。)否则,您只是在泄漏内存,直到系统无法为进程分配更多,在这种情况下进程被杀死.

于 2013-10-27T17:35:25.903 回答