澄清有关场景简化的 WatchKit 性能提示

Clarification of WatchKit Performance tip regarding scene simplification

任何人都可以从 WatchKit Development Tips 页面澄清这一说法吗?

Simplify controller scenes. Reduce the number of hidden objects as much as possible to significantly improve load time. For example, five versions of a controller’s layout in a single controller scene will result in all objects being created before the controller is displayed

我已经读了几十遍了,还是不明白它想表达什么。

  1. 什么是 "scene"?是指Storyboard场景吗?
  2. "hidden objects" 指的是像隐藏按钮这样的字面上隐藏的 UI 元素吗?
  3. 一个控制器的布局怎么可能有五个版本?这只是不计算。

当加载故事板时,例如文件中有 10 个不同的 WKInterfaceControllers,即使初始控制器为空,也会很慢吗?这些不是只根据需要加载吗? 或者,拥有一个包含 10 个原型行的 table 会更好吗?每个原型行实际上是一个独立的界面 - 一次只实例化一个?

因为我们不能在当前版本的 WatchKit 中以编程方式将界面元素添加到控制器,所以我们可能需要显示的任何界面元素都必须包含在 Storyboard 场景中。通过包含这些最初隐藏的元素,我们可以根据需要以编程方式隐藏或取消隐藏这些元素。

例如,包含一个最初隐藏的全屏标签是很常见的。然后,如果出于某种原因需要显示全屏消息,则会填充文本,取消隐藏标签,并隐藏屏幕上的其余元素。为了更轻松地隐藏一组元素,它们通常包含在 WKInterfaceGroup 中,因此只需隐藏顶级组元素。

所以,回答你的问题:

  1. 的确,"scene" 是一个标准的 Storyboard 场景。
  2. 是的,"hidden objects" 指的是我上面描述的字面上隐藏的对象。
  3. 使用我描述的方法,您可以创建五个顶级 WKInterfaceGroup 元素,每个元素都有自己的一组控件和布局。然后,您可能会取消隐藏对显示和隐藏所有其他有意义的那个。

我在自己的应用程序中使用了这些技术,尽管我通常不会有超过三个顶级组。

是的,因为初始化和布局所有这些元素(即使它们是隐藏的)需要时间,建议将其保持在最低限度。

关于情节提要中界面控制器的加载,你是正确的,只加载了需要的界面控制器。但是,如果您有一组五个基于页面的控制器,它们将在第一个页面被激活之前全部加载和初始化。然后将根据需要加载其他控制器。

创建唯一行是另一种可能性,但是您是这样做还是只是 hide/unhide 顶级组取决于您应用的特定需求。一如既往,值得在实际硬件上进行测试。