macos - OS X 应用程序的自动释放池在哪里创建和耗尽?

标签 macos cocoa automatic-ref-counting autorelease nsautoreleasepool

我正在为 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/

相关文章:

iphone - ARC - UIWebView/UIViewController 留在内存中吗?

objective-c - 如何使用 NSPasteboard 和 kPasteboardTypeFileURLPromise 进行复制/粘贴?

macos - .profile 无法在 Mac 的终端上运行

cocoa - Swift 中没有外部名称的方法?

ios - 将对象分配给 Objective-C 中的弱引用?

ios - 这是 Objective C 中的保留循环吗?

ios - 为来自 iOS 背景的 OS X 开发

macos - 在 Mac OS 中专注于应用程序的键盘快捷键

swift - 使用 NSCollectionViewFlowLayout 在 NSCollectionView 上没有动画

macos - 模拟 MouseEvent 无法正常工作 OSX