我目前正在开发类似于twitter的客户端。该应用程序有5个选项卡,都是表视图控制器。
看起来很简单,但是启动时间(从菜单上的应用程序到黑屏+状态栏......到用户界面)是18秒!
我想将其分解为至少5-6秒,并且不希望有闪屏。有人可以给我一些关于如何更快地启动UI的指示吗?例如。我应该使用某些方法/纠正我应该进行API调用的地方?
(P.S。现在几乎90%的初始API调用是在(id)init {}方法中进行的)
答案 0 :(得分:2)
运行调试器会为启动添加大量时间。你有没有把它定时开始运行?这听起来像15-20秒是你通过调试器运行的时间,因为引导程序会杀掉启动时间太长的应用程序。
除此之外,听起来你在启动期间也在进行API调用。这些同步或异步API调用?您可能希望进行异步API调用,因为阻止主UI线程是一个很大的禁忌。如果它们是同步调用,那么绕过它们的简单方法是将它们打包在一个方法中,然后使用[NSThread detachNewThreadSelector:toTarget:withObject:]
。
加载完所有数据后,只需使用新数据更新UI(但请确保在主线程中执行此操作,因为触摸主线程外部的UI元素是另一个大禁忌。使用{{1}是一种方法。
答案 1 :(得分:1)
您应首先添加一些NSLog时间戳,以查看您一直在丢失的确切位置。然后更清楚可以优化什么。
答案 2 :(得分:1)
我的一个应用程序也有五个选项卡(但只有三个表视图控制器),并且它启动时间为6秒(正如您尝试实现的那样)。我注意到只有第一个选项卡的内容在启动时加载。当您第一次触摸选项卡时,会加载其余的。
所以线索可能是为了确保你的标签懒得初始化,我猜你的应用还不是这样。我的应用程序有6个XIB文件,一个用于主窗口,另外五个用于每个选项卡的内容。您的UI组织方式是否相同?
假设您的用户界面没有延迟加载,您可以在选项卡内容的 viewDidLoad:方法中设置断点,看看是谁这么早加载它们。