Я отлаживаю медленный запуск приложения iPhone (Xcode, Objective C ++). Это приложение на основе вкладок с тремя вкладками. Все три вкладки загружаются в один NIB - всего около 20 объектов.
Первый раунд существенной инициализации происходит в обработчике viewDidLoad контроллера представления первой вкладки. Однако между main () и временем запуска этого метода проходит около 1 секунды - около 2/3 от общего времени загрузки. Вопрос - что происходит за это время, и как мне это расследовать (если не считать пошаговую разборку)? Насколько я знаю, между этими двумя моментами нет моего кода - задержка происходит полностью в системном коде.
Может быть, какой-нибудь инструмент, который может дать мне профиль времени для каждой функции?
Объем пакета составляет ~ 4 МБ, но позже я загружаю самый большой файл (~ 3,5 МБ) в обработчик applicationDidFinishLaunching. Удаление этого файла из пакета и комментирование соответствующего кода ничего не делает для этой 1-секундной задержки.
ОБНОВЛЕНИЕ: в конце концов, было вмешательство отладки. Если я запускаю его на устройстве, наблюдая за консолью, время запуска у нас значительно сокращается, и доля задержки (системный код в моем коде) также искажается. Но, тем не менее, между main и viewDidLoad есть заметная задержка, и она составляет около 50% от общего времени загрузки.
Кстати, из всех способов полной загрузки большого файла из пакета в память самым быстрым было прямое отображение памяти (с использованием POSIX mmap ()).