В документации для NSApplicationMain, он говорит:
Создает приложение, загружает основной файл пера из основного пакета приложения и запускает приложение. Вы должны вызывать эту функцию из основного потока вашего приложения [...].
«Основной поток», очевидно, относится к первому потоку программы, где начинается main(argc, argv)
. Краткий обзор NSThread документация раскрывает + (BOOL)isMainThread
, который можно использовать для определения того, является ли текущий поток «основным» или нет. Я провел несколько тестов: этот метод работает независимо от того, был ли уже вызван NSApplicationMain
.
Мой вопрос состоит из двух (несколько связанных) частей:
- Что такого особенного в основном потоке для
NSApplicationMain
? - Как Cocoa в первую очередь идентифицирует основной поток?
NSApplicationMain
, становится основным потоком, в котором происходит цикл выполнения. - person spudwaffle   schedule 15.09.2011Forker
в новом потоке, (2)Forker
, который вызываетNSApplicationMain
, и (3) оконного контроллера, который получает управление после того, какNSApplicationMain
сделал свое дело. Каждый из этих 3 печатает независимо от того, находится ли он в основном потоке, используя метод, упомянутый выше. Только (1) сообщает, что он находится в основном потоке, и приложение почти сразу вылетает. Он не падает, когдаNSApplicationMain
вызывается нормально. - person Calvin   schedule 15.09.2011