在 Xcode 中测量 CPU 呈现 UIView 的使用情况
Measuring CPU usage rendering a UIView in Xcode
我在 Interface Builder 中有一个 nib 视图。它在笔尖内有几个 UIStackViews
,我使用它是因为它很容易对齐 UI 元素。一位同事建议我不要使用 UIStackViews
,因为从计算的角度来看它们是 "expensive"。另一种方法是手动为单个元素设置约束。
我可以使用什么 Xcode 工具来验证我同事的断言以及我将如何使用它?我发现的最好的东西是 this,但我希望能找到更精细的东西。有问题的笔尖是 UITableViewCell
.
they're "expensive" from a computational standpoint
好的,我现在将尝试证明这完全是假的。
堆栈视图并不神奇。堆栈视图不执行任何特殊的 运行 时间调整。堆栈视图只是一个约束制定者,不多也不少。你也是。堆栈视图所做的一切,您都可以做到。堆栈视图的结果约束与您自己创建的约束完全相同(假设您甚至知道如何创建)。因此,约束本身并不更昂贵 只是因为堆栈视图产生了它们。
那么让我们来谈谈约束的初始生成。好吧,堆栈视图通过机械生成其约束。这只是一种简单的公式化方法,它基于堆栈视图的设置和(在某些情况下)排列的子视图的固有内容大小等已经给出的参数。因此,堆栈视图实际上根本不需要时间 来释放它生成的约束,而且它只需要执行一次。
那么,如果约束的生成并不昂贵,并且如果约束本身也不昂贵,那么费用在哪里呢?没地方了。
有人可能会争辩说,对于特定的期望结果,使用堆栈视图不必要地复杂或懒惰,因此 "better" 自己制定约束;但是 "expensive" 在我看来并不是可以针对堆栈视图提出的真正指控。
在四处挖掘时,我发现了一个名为 LayoutFrameworkBenchmark 的回购协议。我在 iPhone 7+ 模拟器上 运行 iOS 12 中的基准测试。我收集了数据并将其转储到 Google Sheet 中。它确实表明 UIStackView
与其他布局方法相比是 pokey。
我现在明白为什么两个阵营似乎都有人了,但是在现实世界中,人眼不太可能注意到很大的差异,除非它是一个巨大的集合。
我在 Interface Builder 中有一个 nib 视图。它在笔尖内有几个 UIStackViews
,我使用它是因为它很容易对齐 UI 元素。一位同事建议我不要使用 UIStackViews
,因为从计算的角度来看它们是 "expensive"。另一种方法是手动为单个元素设置约束。
我可以使用什么 Xcode 工具来验证我同事的断言以及我将如何使用它?我发现的最好的东西是 this,但我希望能找到更精细的东西。有问题的笔尖是 UITableViewCell
.
they're "expensive" from a computational standpoint
好的,我现在将尝试证明这完全是假的。
堆栈视图并不神奇。堆栈视图不执行任何特殊的 运行 时间调整。堆栈视图只是一个约束制定者,不多也不少。你也是。堆栈视图所做的一切,您都可以做到。堆栈视图的结果约束与您自己创建的约束完全相同(假设您甚至知道如何创建)。因此,约束本身并不更昂贵 只是因为堆栈视图产生了它们。
那么让我们来谈谈约束的初始生成。好吧,堆栈视图通过机械生成其约束。这只是一种简单的公式化方法,它基于堆栈视图的设置和(在某些情况下)排列的子视图的固有内容大小等已经给出的参数。因此,堆栈视图实际上根本不需要时间 来释放它生成的约束,而且它只需要执行一次。
那么,如果约束的生成并不昂贵,并且如果约束本身也不昂贵,那么费用在哪里呢?没地方了。
有人可能会争辩说,对于特定的期望结果,使用堆栈视图不必要地复杂或懒惰,因此 "better" 自己制定约束;但是 "expensive" 在我看来并不是可以针对堆栈视图提出的真正指控。
在四处挖掘时,我发现了一个名为 LayoutFrameworkBenchmark 的回购协议。我在 iPhone 7+ 模拟器上 运行 iOS 12 中的基准测试。我收集了数据并将其转储到 Google Sheet 中。它确实表明 UIStackView
与其他布局方法相比是 pokey。
我现在明白为什么两个阵营似乎都有人了,但是在现实世界中,人眼不太可能注意到很大的差异,除非它是一个巨大的集合。