Cocoa约束导致高CPU使用率

时间:2012-08-16 23:06:15

标签: cocoa nslayoutconstraint

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

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

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

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

经过一些尝试和错误后,我将其缩小到此视图Tableview cell

这是TableView中的自定义单元格。如果我用普通单元替换它,则cpu使用率恢复正常。我还检查了布局是不明确的。

1 个答案:

答案 0 :(得分:1)

这通常是因为约束的舍入问题。特别是如果你使用“等宽”约束。

Two Buttons with Equal Width Constraint

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

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