我正在为 ARC 重构我的 OS X 应用程序。打开 main.m 文件,我确信我会找到自动释放池实例化和耗尽(如 iOS 项目),但令我惊讶的是它不在那里。
所以我的第一个问题是:
- 主自动释放池在哪里?
我的下一个问题是:
- 如果未创建主自动释放池,我是否需要创建它?或者自动释放的对象是否以某种自动方式释放?
最佳答案
您的 main.m 文件应包含以下调用:
NSApplicationMain(argc, (const char **)argv);
NSApplicationMain()
负责创建应用程序,即 NSApplication
的实例,它又负责创建自动释放池:
The NSApplication class sets up autorelease pools (instances of the NSAutoreleasePool class) during initialization and inside the event loop—specifically, within its initialization (or sharedApplication) and run methods.
这意味着,在一般情况下,您不必担心创建自动释放池,因为 NSApplication
已经在初始化和事件循环中执行了此操作。在某些情况下,创建自己的自动释放池可能是必要/可取的,例如具有创建许多自动释放对象的循环的方法。在这种情况下,为每个循环迭代提供一个自动释放池是一个好主意。
关于macos - OS X 应用程序的自动释放池在哪里创建和耗尽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164448/