这是一个初学者问题。
我的目标:了解背后的设计理念。
当我创建一个链接Foundation类的命令行工具项目时,xcode生成了以下代码片段。
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还有其他原因/优势吗?
答案 0 :(得分:3)
必须存在自动释放池才能使内存管理系统正常工作。你是对的[pool drain]
可能是不必要的,因为操作系统将在进程退出时清理你程序的所有内存,但为了清晰起见(并且严格正确),它包括在内。
我认为这里的假设是你可能会添加使用自动释放池的代码,所以他们只是希望能为你节省一些打字。
答案 1 :(得分:1)
你是正确的,当你编程退出它的内存将被回收,但如果你的程序连续几天运行而不退出(服务器或守护进程)并且你没有自动发布池而你没有发布怎么办?你的对象。然后怎样呢?您的应用将继续消耗内存,直到 - 爆炸 - 内存不足并导致系统崩溃。
那是自动发布池的原因。