Канонический метод измерения производительности запуска приложений 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 для установки статических выходов для вашего делегата приложения.