16

我被要求减少 iOS 应用程序的启动时间。我对一般的平台/工具非常熟悉,但我之前没有关注应用程序的启动时间。我想知道是否有已知的攻击这个问题的模式?

我意识到我可以简单地测量从 main() 到完成application:didFinishLaunchingWithOptions:(包括任何后台加载任务)所花费的时间,但是我希望可能有一种更标准化的方法来做到这一点。

任何建议将不胜感激!

-M

4

2 回答 2

15

来自 WWDC 2012 会议 235

在代码的第一行设置起点main.m

#import <UIKit/UIKit.h>

CFAbsoluteTime StartTime;

int main(int argc, char *argv[])
{
    StartTime = CFAbsoluteTimeGetCurrent();

    @autoreleasepool {
        ...

AppDelegate在's中的某处设置终点application:didFinishLaunchingWithOptions:

extern CFAbsoluteTime StartTime;
 ...
dispatch_async(dispatch_get_main_queue(), ^{
    NSLog(@"Launched in %f sec", CFAbsoluteTimeGetCurrent() - StartTime);
});
于 2014-08-06T11:36:04.350 回答
1

您的方法听起来很正确(我建议您使用 CFAbsoluteTime 进行测量)。

可以帮助您减少启动时间的一件事是避免在应用程序启动时从 nib 加载视图控制器。如果我没记错的话,这甚至会在您的应用程序启动之前强制它们被加载到内存中。相反,在需要时动态分配和初始化视图控制器。请注意,您仍然可以让视图控制器加载您希望存储在 Nibs 中的视图,您不必停止使用 IB。只是不要使用 IB 为您的应用程序委托设置静态插座。

于 2011-09-17T16:17:23.027 回答