求助:Autosaving NSDocument搭配NSWindow与NSToolbar时的内存泄漏问题
Cocoa Autosaving NSDocument 内存泄漏求助:关闭文档后实例无法释放
我遇到一个Cocoa内存泄漏问题:用户关闭开启Autosaving的NSDocument后,该文档实例始终无法被释放。在此求助,是否有其他开发者碰到过类似问题,以及可行的解决方案。
具体场景与问题细节
- 当开启Autosaving的NSDocument打开包含NSToolbar的NSWindow时,默认的'Unified'工具栏样式会将文档标题置于工具栏左侧,标题右侧存在一个可点击区域。
- 用户点击该区域时,控制台会输出错误日志:
[Document] Popover failed to show。 - 表面看只是普通错误,但实际已引发内存泄漏:未能正常显示的
NSDocumentTitlebarPopoverViewController被持续持有,且该视图控制器对NSDocument存在强引用,最终导致整个NSDocument实例无法被销毁。
点击区域示意图

复现说明
我制作了一个最小复现项目:基于macOS文档应用模板创建,添加了Toolbar,并在Document类的deinit方法中加入打印语句,用于验证文档实例是否成功销毁。
搜索情况
我在网络上搜索[Document] Popover failed to show日志信息,以及泄漏的视图控制器类名NSDocumentTitlebarPopoverViewController,均未找到相关结果。
内容的提问来源于stack exchange,提问作者Daniel Higgott
相关产品推荐
相关产品推荐

