外部自动释放池

时间:2013-10-27 17:13:03

标签: objective-c cocoa-touch cocoa

我不明白为什么我们需要外部自动释放池(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;
}

2 个答案:

答案 0 :(得分:3)

这是一个框架不变量。该框架取决于是否存在自动释放池。如果没有自动释放池,您的程序将向日志发送垃圾邮件。该程序仍然可能会运行,内存仍将在退出时释放,但框架仍然希望有一个池可以调用它。

答案 1 :(得分:-1)

你是对的,当进程退出时,所有内存都会被释放。但是自动释放池的意义在于之前释放内存。 (在你的例子中,你是“放弃”内存 - 分配然后忘记分配。)否则,你只是泄漏内存,直到系统不能再为进程分配,在这种情况下进程被杀死