衡量iOS应用启动性能的典型方法?

Mat*_*y P 16 performance objective-c app-startup ios

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

我意识到我可以简单地测量从main()到完成application:didFinishLaunchingWithOptions:(包括任何后台加载任务)所需的时间,但同样,我希望可能有更标准化的方法来执行此操作.

任何建议将不胜感激!

-M

Gon*_*Gon 14

来自WWDC 2012会议235

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

#import <UIKit/UIKit.h>

CFAbsoluteTime StartTime;

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

    @autoreleasepool {
        ...
Run Code Online (Sandbox Code Playgroud)

某处设置终点AppDelegateapplication:didFinishLaunchingWithOptions:

extern CFAbsoluteTime StartTime;
 ...
dispatch_async(dispatch_get_main_queue(), ^{
    NSLog(@"Launched in %f sec", CFAbsoluteTimeGetCurrent() - StartTime);
});
Run Code Online (Sandbox Code Playgroud)

  • 使用@jshier`dispatch_async`,以便在用户实际与应用程序交互时打印日志.主要队列在`application:didFinishLaunchingWithOptions`中被阻塞,我们想知道主线程何时实际完成所有工作. (3认同)

Dan*_*nra 1

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

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