Канонический метод измерения производительности запуска приложений iOS?

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

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

Любые предложения будут очень благодарны!

-M

Ответы

Ответ 1

из сессии WWDC 2012 235

установить начальную точку в первой строке кода в main.m

#import <UIKit/UIKit.h>

CFAbsoluteTime StartTime;

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

    @autoreleasepool {
        ...

установите конечную точку где-нибудь в AppDelegate application:didFinishLaunchingWithOptions:

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

Ответ 2

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

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