跳过布局隐藏视图的子视图



由于我正在开发的应用程序的设计者,我不得不在一个视图控制器中塞进很多东西。我想我可以通过跳过调用来减轻一些CPU压力并节省一些时间

[super layoutSubviews];

在隐藏视图上(我指的是UIView的一个子类,它包含所有其他内容),并且只在视图出现之前刷新它。如果这对你们中的一些人来说很重要,我可以通过设置BOOL标志来做到这一点。这在iOS8上运行良好,但在iOS7上的应用程序崩溃:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. XXX's implementation of -layoutSubviews needs to call super.'

那么,我如何才能跳过在iOS7上调用layoutSubviews呢?

当然,有一种可能性是,我完全不理解iOS是如何工作的,跳过这个调用不会节省任何时间,因为它无论如何都会计算约束。在这种情况下,问题是"如何跳过计算隐藏视图的约束?"。

如果您放弃了对iOS 7的支持,iOS 8将通过active属性添加禁用和启用约束的功能。但是,如果你需要支持iOS 7,你唯一的选择就是从视图层次结构中删除视图和/或约束,并在再次需要时恢复它们。

但你确定-layoutSubviews正在导致经济放缓吗?在尝试优化之前,您应该在Instruments中运行类似时间档案器的程序,以确保这确实是问题所在。