代码之家  ›  专栏  ›  技术社区  ›  Anthony Kong

Xcode,命令行工具:为什么nsautoreleasepool在生成的模板中?

  •  0
  • Anthony Kong  · 技术社区  · 15 年前

    一个初学者的问题。

    我的目标:理解这背后的设计原理。

    当我创建了一个与基础类链接的命令行工具项目时,XClass生成了下面的代码片段。

    int main (int argc, const char * argv[]) {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
        // insert code here...
        NSLog(@"Hello, World!");
        [pool drain];
        return 0;
    }
    

    我对NSautoReleasePool的功能有一些大致的了解。但是我不明白为什么我们需要nsautoreleasepool:在这样一个简单的程序中,当main()完成时,所有的alloc'd对象都将被释放。

    在这里有没有其他的理由/优势让NSAutoReleasePool?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Carl Norum    15 年前

    自动释放池必须存在,内存管理系统才能工作。你说得对 [pool drain] 可以说是不必要的,因为当进程退出时,操作系统将清理所有程序的内存,但为了清晰(和严格的正确性),它被包括在内。

    我认为这里的假设是您可能会添加使用自动释放池的代码,所以他们只是希望为您节省一些输入。

        2
  •  1
  •   Jasarien    15 年前

    您是正确的,当您的程序退出时,它的内存将被回收,但是如果您的程序连续运行数天而没有退出(服务器或守护进程),并且您没有自动释放池,并且您没有释放对象,该怎么办?那么呢?您的应用程序将继续消耗内存,直到- 发巨响 -内存不足,系统崩溃。

    那是 为什么有自动释放池。