Какая система работает до запуска функции main () приложения iPhone? - PullRequest
2 голосов
/ 23 мая 2010

Мое приложение занимает слишком много времени для загрузки. Поэтому я добавил NSLog в функцию main (), чтобы измерить время загрузки с первого:

int main(int argc, char *argv[]) 
{    
    NSLog(@"main");

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

Но журнал показывается действительно позже. Default.png отображается около 5 секунд, весь процесс загрузки завершен через 1 ~ 2 секунды после появления журнала.

Что происходит перед выполнением функции main () в приложении iPhone?

1 Ответ

4 голосов
/ 23 мая 2010

Точкой входа двоичного файла является не main(), а start. Это верно для большинства двоичных файлов, скомпилированных с gcc. Если в C ++ имеются конструкторы статических переменных или функции с __attribute__((constructor)) атрибутом или +load методами , они будут выполняться до main().

Из-за динамического связывания некоторый код будет работать даже до start. dyld несет ответственность за это. На этом этапе заполняются все неопределенные внешние символы. И, конечно же, инициализаторы этих библиотек будут выполняться.

Default.png отображается SpringBoard и не контролируется вашим приложением. Таким образом, может быть задержка между показанным Default.png и кодом на самом деле.

Эти действия, однако, быстрые. Задержка, скорее всего, связана с подключением к удаленному GDB и XCode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...