Канонический метод измерения производительности запуска приложения iOS? - PullRequest
16 голосов
/ 17 сентября 2011

Меня попросили сократить время запуска приложения для iOS.Я очень хорошо знаком с платформой / инструментами в целом, но раньше я не фокусировался на времени запуска приложений.Мне интересно, существуют ли известные шаблоны для решения этой проблемы?

Я понимаю, что могу просто измерить время, необходимое для перехода от main () до завершения application:didFinishLaunchingWithOptions: (которое включает в себя любую фоновую загрузкузадач), но я надеюсь, что для этого может быть более стандартизированный способ.

Буду признателен за любые предложения!

-M

Ответы [ 2 ]

14 голосов
/ 06 августа 2014

из сессии 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);
});
1 голос
/ 17 сентября 2011

Ваш метод звучит как правильный (я рекомендую использовать CFAbsoluteTime для ваших измерений).

Одна вещь, которая может помочь вам сократить время запуска, - это избегать загрузки View Controllers из перьев при запуске приложения.Если я не ошибаюсь, это заставляет их загружаться в память даже до запуска вашего приложения.Вместо этого динамически выделяйте и запускайте ваши контроллеры представления, когда они вам нужны.Обратите внимание, что у вас все еще могут быть представления, которые вы хотите загрузить с помощью контроллеров представления, хранящихся в Nibs, вам не нужно прекращать использовать IB.Только не используйте IB для установки статических выходов для вашего делегата приложения.

...