首先,我意识到这个应用程序有一些设计问题,虽然重写它的大部分可能会解决我的问题,但我正在寻找一种方法来加快速度。
基本上我有
viewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
viewController.view;
其中MyViewController.xib是一个相当复杂的nib文件,其中包含许多交织在一起的控制器和视图,其中一些当然从其他nib加载它们的视图和层次结构,但肯定不是全部。加载大约需要7秒钟,考虑到这是一个iPhone应用程序,这是一个很长的时间。
强制视图加载的原因是我在并行线程中也做了一些网络请求,一旦完成,我想用这些视图设置很多东西。
我的问题是:如何找出我的笔尖哪些部分花了这么长时间以及如何在不完全重写整个应用程序(目前)的情况下优化它的最佳策略?
答案 0 :(得分:3)
要做的第一件事就是不要假设笔尖加载是瓶颈而没有直接的证据。笔尖加载是高度优化的,非常有效。您的瓶颈更可能是网络请求而不是笔尖。使用Instruments获取应用程序在您执行任何操作之前花费时间的具体数据。
假设它是笔尖,Andiih answer是最适合分析的,但听起来我觉得你确实遇到了设计问题。
听起来你需要把你的大笔尖分成更小的笔尖。
每个笔尖有一个视图是常见的。例如,假设您有一个带有五个标签的标签栏的应用。然后每个选项卡都有一个表视图,可以打开一个详细视图。在正常设置中,您将有11个单独的笔尖。一个笔尖将定义标签栏,每个标签的视图一个笔尖,然后每个细节视图一个笔尖。当应用程序启动时,只有tabbar的nib和第一个可见选项卡会加载,所以你只能加载11个nib中的两个来启动。
要进行优化,首先要做的是将其分解为尽可能小的单个笔尖。笔尖仅在需要时加载。您应该在整个笔尖中放置功能,以便在未立即显示其视图时不加载笔尖。
Nib只是轻量级数据文件,因此不要害怕创建99%相同的笔尖。例如,我经常为每个纵向和横向视图使用单独的视图。从用户的角度来看,它是一个视图,但我有三个独立的笔尖。我这样做是因为它易于使用完全独立的视图而不是旋转单个复杂视图。当使用其方向时,每个笔尖都会被加载。如果方向永远不会改变,它永远不会被加载。
如果您的复杂界面根据网络请求发生了显着变化,那么在运行时,每个变体的单独nib将比将所有功能都塞入一个nib中更快。
答案 1 :(得分:1)
我不知道这是否真的有用,但你可以在每个控制器中的initWithCoder中放置日志语句,这些语句将在每个子xib加载时调用。这可能会给你一些线索。
我猜乐器不会给你任何有用的东西吗?