我的应用程序链接到这些框架:
Cocoa.Framework
AppKit.Framework
CoreData.Framework
Foundation.Framework
请注意,OpenGL.Framework 未链接。但是,在设置 DYLD_PRINT_LIBRARIES=1 后,我注意到:
...
dyld:加载:/System/Library/Frameworks/ OpenGL.framework /Versions/A/ OpenGL
dyld:加载:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries /...
dyld:加载:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries /...
dyld:加载:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries /...
dyld:加载:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries /...
dyld:加载:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries /...
...
这是一个大问题,因为正如 [cocoa-dev 列表][1] 中所述,OpenGL 框架会导致 NVidia 显卡为较新的 MacBook Pro 启动。
正如预期的那样,我的应用程序导致 NVidia 卡开机。更糟糕的是,关闭窗口时框架没有卸载。
我拥有的唯一非标准图形元素是一些自定义 NSBezierPath 图纸和阴影。
本质上,当我的应用程序启动时,使用集成显卡直到显示窗口,然后独立显卡打开电源并保持打开状态,无论窗口状态如何。
回答
对于具有 NSBezierPaths 或清除背景的 NSView,请确保设置:[myView setWantsLayer:NO]