Почему в Apple Cocoa API почему важно вызывать NSApplicationMain из основного потока? - PullRequest
7 голосов
/ 15 сентября 2011

В документации для NSApplicationMain написано:

Создает приложение, загружает основной файл пера из основного пакета приложения и запускает приложение.Вы должны вызывать эту функцию из основного потока вашего приложения [...].

«Основной поток», очевидно, относится к первому потоку программы, с которого начинается main(argc, argv).Быстрый просмотр документации NSThread показывает + (BOOL)isMainThread, который можно использовать, чтобы определить, является ли текущий поток "основным" или нет.Я провел несколько тестов: этот метод работает независимо от того, был ли вызван NSApplicationMain.

Мой вопрос состоит из двух (несколько связанных) частей:

  1. Что такого особенного восновной поток для NSApplicationMain?
  2. Как Какао определяет основной поток в первую очередь?

1 Ответ

7 голосов
/ 16 сентября 2011

Здесь - хорошее место для изучения NSApplicationMain после повторной реализации функции.NSApplicationMain должен вызываться из основного потока главным образом потому, что

  1. Он обрабатывает первичный интерфейс
  2. Элементы пользовательского интерфейса (в нескольких системах, а не только в OS X) должны вызываться в одном и том жепоток для правильной работы.
  3. Графические элементы, предоставляемые в рамках Cocoa, предполагают, что они будут работать в главном потоке.

В значительной степени, поскольку Cocoa вызывает вещи в главном потокеи пользовательский интерфейс должен быть запущен в одном потоке, вы должны работать в основном потоке для всего, что касается пользовательского интерфейса, включая NSApplicationMain.

...