以下代码最近添加到现有应用程序中。buttonHolderView 是一个 NSView,里面有一个 NSButton 控件。
if ((NSInteger)NSAppKitVersionNumber >= NSAppKitVersionNumber10_10) {
NSTitlebarAccessoryViewController *pinButtonViewController = [[NSTitlebarAccessoryViewController alloc] init];
pinButtonViewController.view = self.buttonHolderView;
pinButtonViewController.layoutAttribute = NSLayoutAttributeRight;
[self.window addTitlebarAccessoryViewController:pinButtonViewController];
}
应用程序向用户呈现一个或多个窗口,每个窗口都有一个播放视频源的 NSOpenGLView。随着这些窗口数量的增加,OS X 10.10 的响应延迟也会增加。似乎主线程被征税更多。
使用新代码和不使用新代码运行之间的仪器时间分析器数据比较显示,在 [NSApplication sendEvent:] 中花费的时间百分比小于标题中没有附件视图时通常的 1/2(3.4% 到 1.4%)酒吧这是预期的滞后经验。在 [NSView displayIfNeeded] 中花费的时间也显着增加(从 26% 增加到 39%)。
任何关于如何纠正这种滞后的想法都值得赞赏。