14

我最近切换到NSLayoutConstraint我的应用程序,我突然注意到,在某些视图中,我的应用程序经常使用大约 20% 或更多的 CPU。正如我所说,它仅在某些视图出现在屏幕上并且仅在我切换到约束后才会发生。

通过运行时间分析器,我注意到[NSView displayIfNeeded]在这些视图中不断调用它,即使没有发生任何事情,也没有事件或用户交互。此外,如果我调整窗口大小,我可以找到 CPU 使用率降至正常值的某些配置。如果我将窗口恢复到原来的大小,CPU 使用率会再次增长并再次[NSView displayIfNeeded]被不断调用。

即使约束没有崩溃(控制台中没有不满足约束错误的迹象),似乎也有某些视图和大小的组合会不断刷新。

有没有人经历过这个?或者至少知道如何更好地跟踪问题?

经过一番尝试和错误后,我将其范围缩小到此视图表格视图单元格

它是 TableView 中的自定义单元格。如果我用正常的单元格替换它,CPU 使用率就会恢复正常。我还检查了布局是否不明确。

4

1 回答 1

1

这通常是由于约束的舍入问题而发生的。特别是如果您使用“等宽”约束。

具有等宽约束的两个按钮

类似问题的另一个原因是使用“容器中的中心”约束。这通常会导致舍入问题。

如果您使用了这些约束之一并降低它们的优先级,请检查您的约束。如果它们不适合,这允许忽略这些规则。或者更好的是,创建没有中心和相等宽度/高度约束的布局。

于 2014-03-03T13:32:43.263 回答