如何释放 NSColorPanel?
How to release NSColorPanel?
我想在用户点击 NSColorWell
时启动 NSColorPanel
。当用户点击颜色井时面板打开,但即使在用户关闭面板后面板的实例也会保留。
所以我将它的 releasedWhenClosed
设置为 true
。但是,这次当用户关闭 window 时面板会正确释放,但下次用户通过点击相同颜色的井打开面板时,应用程序会崩溃,因为面板实例已经消失。
如何关闭 window 但让用户再次启动颜色井?具体来说,我将颜色井的 activate:
方法设置为以下内容:
override func activate(exclusive: Bool) {
NSColorPanel.sharedColorPanel().showsAlpha = true // the app crashes here the next time the user opens the color well
super.activate(exclusive)
}
NSColorPanel
是一个单例,即延迟加载。只能创建一个 NSColorPanel
实例。颜色面板在第一次 sharedColorPanel
调用时加载到内存中。如果您释放此面板,应用程序将在您下次访问它时崩溃,因为 NSColorPanel
class 保留对已释放实例的引用。 Apple 不提供在 sharedColorPanel
使用后清除资源的方法。
我想在用户点击 NSColorWell
时启动 NSColorPanel
。当用户点击颜色井时面板打开,但即使在用户关闭面板后面板的实例也会保留。
所以我将它的 releasedWhenClosed
设置为 true
。但是,这次当用户关闭 window 时面板会正确释放,但下次用户通过点击相同颜色的井打开面板时,应用程序会崩溃,因为面板实例已经消失。
如何关闭 window 但让用户再次启动颜色井?具体来说,我将颜色井的 activate:
方法设置为以下内容:
override func activate(exclusive: Bool) {
NSColorPanel.sharedColorPanel().showsAlpha = true // the app crashes here the next time the user opens the color well
super.activate(exclusive)
}
NSColorPanel
是一个单例,即延迟加载。只能创建一个 NSColorPanel
实例。颜色面板在第一次 sharedColorPanel
调用时加载到内存中。如果您释放此面板,应用程序将在您下次访问它时崩溃,因为 NSColorPanel
class 保留对已释放实例的引用。 Apple 不提供在 sharedColorPanel
使用后清除资源的方法。