【问题标题】:Speed up UI loading from NIBs on the iPhone加快从 iPhone 上的 NIB 加载 UI
【发布时间】:2010-05-18 12:03:24
【问题描述】:

首先,我意识到这个应用程序存在一些设计问题,虽然重写其中很大一部分可能会解决我的问题,但我现在正在寻找一种让事情变得更快的方法。

基本上我有

viewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
viewController.view;

其中 MyViewController.xib 是一个相当复杂的 nib 文件,其中包含许多交织在一起的控制器和视图,其中一些当然会从其他 nib 加载它们的视图和层次结构,但肯定不是全部。加载大约需要 7 秒,考虑到这是一个 iPhone 应用程序,这个时间确实很长。

强制视图加载的原因是我还在并行线程中执行一些网络请求,一旦这些请求完成,我想用这些视图设置很多东西。

我的问题是:我如何找出我的笔尖的哪些部分花费了这么长时间,以及在不完全重写整个应用程序的情况下优化它的最佳策略是什么(目前)?

【问题讨论】:

    标签: iphone cocoa-touch nib


    【解决方案1】:

    首先要做的是在没有直接证据的情况下假设笔尖加载是瓶颈。笔尖加载经过高度优化且非常高效。您的瓶颈更有可能是网络请求而不是笔尖。在您执行任何操作之前,使用 Instruments 获取有关应用程序花费时间的具体数据。

    假设它是笔尖,Andiih answer 是分析的最佳选择,但在我看来你确实遇到了设计问题。

    听起来你需要把你的大笔尖分成小笔尖。

    每个笔尖只有一个视图是很常见的。例如,假设您的应用程序有一个带有五个选项卡的选项卡栏。然后每个选项卡都有一个表格视图,可以打开一个详细视图。在正常设置中,您将有 11 个单独的笔尖。一个笔尖定义标签栏,每个标签视图一个笔尖,然后每个细节视图一个笔尖。当应用程序启动时,只会加载选项卡栏的笔尖和第一个可见选项卡,因此您只需加载 11 个笔尖中的两个即可启动。

    要进行优化,首先要做的是将其分解为尽可能小的单个笔尖。笔尖仅在需要时加载。您应该将功能放置在您的笔尖中,这样如果笔尖的视图没有立即显示,您就不会加载笔尖。

    笔尖只是轻量级的数据文件,所以不要害怕创建 99% 相同的笔尖。例如,我经常为每个纵向和横向视图使用单独的视图。从用户的角度来看,这是一个视图,但我有三个独立的笔尖。如果使用完全独立的视图比旋转单个复杂视图更容易,我会这样做。每个笔尖在使用其方向时被加载。如果方向永远不会改变,则永远不会加载。

    如果您有一个复杂的接口,该接口会根据网络请求发生显着变化,那么在运行时为每个变体设置单独的 nib 比将所有功能塞进一个 nib 会更快。

    【讨论】:

      【解决方案2】:

      我不知道这是否真的有效,但您可以将日志语句放入每个控制器的 initWithCoder 中,每个控制器将在每个子 xib 加载时调用该语句。这可能会给你一些线索。

      我猜乐器不会给你任何有用的东西?

      【讨论】:

      • initWithCoder 是一个非常好的主意。不过不要忘记给超级用户打电话。
      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多