我目前正在开发一个类似于twitter的客户端。该应用程序有5个选项卡,并且都是表视图控制器。
这看起来很简单,但启动时间(从点击应用程序在menu..to上的黑色screen+status栏...to用户界面)是18秒!
我想把这段时间缩短到至少5-6秒,并且不想出现闪屏。有人能给我一些关于如何更快地打开UI的建议吗?例如,我应该使用的某些方法/应该在哪里进行API调用的正确位置?
(附注:现在几乎90%的初始API调用都是在(id)init{}方法中进行的)
发布于 2010-08-27 02:37:13
通过调试器运行会增加启动的大量时间。你有没有计时让它从正常的开始运行?听起来这15-20秒是你在运行调试器时的时间,因为引导程序会终止那些启动时间太长的应用程序。
除此之外,听起来你也是在启动过程中进行API调用。这些API调用是同步的还是异步的?您可能希望执行异步API调用,因为阻塞主UI线程是一个很大的禁忌。如果它们是同步调用,绕过它们的一种简单方法是将它们打包在单个方法中,然后使用[NSThread detachNewThreadSelector:toTarget:withObject:]。
加载完所有数据后,只需使用新数据更新UI即可(但请确保在主线程中执行此操作,因为在主线程之外接触UI元素是另一个大禁忌。使用[NSObject performSelectorOnMainThread:withObject:waitUntilDone]就是这样做的一种方式。
发布于 2010-08-27 01:54:03
您应该首先添加一些NSLog时间戳,以查看您在这段时间到底在哪里丢失了时间。然后,可以优化的内容将变得更加清晰。
发布于 2010-08-27 02:07:23
我的一个应用程序也有五个标签页(但只有三个表视图控制器),而且它只需要6秒就能启动(正如你想要实现的那样)。我注意到只有第一个选项卡的内容在启动时加载。其余的在您第一次触摸选项卡时加载。
所以线索可能是确保你的标签页被懒惰地初始化,我猜你的应用程序还不是这样的。我的应用程序有6个XIB文件,一个用于主窗口,5个用于每个选项卡的内容。你的UI也是这样组织的吗?
假设您的UI没有延迟加载,您可以在选项卡内容的viewDidLoad:方法中设置断点,并查看谁在这么早地加载它们。
https://stackoverflow.com/questions/3577965
复制相似问题