我有一个 SwiftUI/AppKit 应用程序(为了与 macos 10.15 兼容)。 我已经使用
NSOpenPanel
和 NSSavePanel
成功实现了打开和保存文件方法。
我在 macOS 的活动监视器中注意到,一旦调用我的方法,这两个进程就会打开,但它们永远不会终止:
com.apple.appkit.xpc.openAndSavePanelService ...
QuickLookUIService (com.apple.appkit.xpc.openAndSavePanelService ...
打开/保存完成后,它们仅使用最少的 CPU 和很少的内存(19 和 3 MB)。
到目前为止我还没有看到问题,但我想知道为什么这些辅助进程不会终止或取消分配。
这是
AppDelegate
中的代码:
@IBAction func openDocument(_ sender: Any?) {
let openPanel = NSOpenPanel()
openPanel.prompt = "Import"
openPanel.title = "Choose a .plist file"
openPanel.titleVisibility = .visible
openPanel.canCreateDirectories = false
openPanel.allowedFileTypes = ["plist"] // TODO: deprecated in macOS 12
openPanel.setFrameAutosaveName("Open Panel")
let result = openPanel.runModal()
if result == .OK {
if let fileUrl = openPanel.url {
let path = fileUrl.path
print("selected file to open: '\(path)'")
loadArray(from: fileUrl)
}
} else if result == .cancel {
print("Open document (Import Actions) was cancelled")
}
}
此行为是否正常,还是错误或泄漏?
好的,我找到了这个答案: 为什么 NSOpenPanel/NSSavePanel 显示内存泄漏?
它说
NSOpenPanel
/NSSavePanel
是 单例,其中“第一次调用[它们]时,会创建 NSOpenPanel
的实例但不会释放。这不是泄漏,而是优化。 ”