Порядок обращения делегатов NSApplication

Я заметил кое-что странное в моих обратных вызовах делегата NSApplication. Когда я запускаю приложение с подключенным отладчиком, я вижу то, что ожидаю: applicationDidFinishLaunching: сначала вызывается, потом applicationDidBecomeActive:

Когда я запускаю приложение без отладчика, я получаю звонки в обратном порядке: applicationDidBecomeActive: называется раньше applicationDidFinishLaunching:

Для этого есть причина? Это делает очень запутанным учет различных сценариев, основанных на отладчике и не отладчике.

[примечание: тестирование это в Маверикс]

1 ответ

Решение

Относительный порядок этих методов делегатов во время запуска не задокументирован, поэтому не следует полагаться на какой-либо конкретный порядок.

Если вы обеспокоены тем, что инициализация не была выполнена, когда -applicationDidBecomeActive: называется, то вы должны сделать эту инициализацию в -applicationWillFinishLaunching: а не в -applicationDidFinishLaunching:, Или же вы должны выполнить инициализацию по требованию, например, инициализировать свойство при первом запросе его значения.

Другие вопросы по тегам