Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

Последовательность запуска приложения, написанного на Cocoa

#cocoa #xcode #macos


Скачал исходный код торрент-клиента Transmission для изучения. Пытаюсь идти по цепочке,
и если я правильно все понял, то:

Как и у всех C-подобных программ,
    запуск начинается с функции main()
Далее, отсюда функция
        NSApplicationMain()  запускает
        обработчик (цикл) сообщений, которые
        будут поступать из файлов .xib
?
            - и здесь моя цепочка обрывается

В каком месте программа продолжается? Нет нигде ни AppDelegate, ни реализации протокола
NSApplicationDelegate. Не могу уцепиться - выйти из функции main() - куда мне последовательно
идти? Какой файл дальше просматривать? Файл .xib с окном, которое появляется первым
при запуске программы, я нашел. Но откуда программа его запускает?    


Ответы

Ответ 1



Отвечу на вопросы в обратном порядке. Программа запускает файл с окном из main bundle приложения. Это происходит в функции NSApplicationMain. В случае Transmission этот самый .xib - это MainMenu.xib. Затем стоит просмотреть файл Controller.h. У главного окна приложения через IBOutlet указан экземпляр класса Controller - значит, этот класс будет инстанцирован уже в функции NSApplicationMain. Перед посылкой классу любого другого сообщения будет послано сообщение +initialize, начинать читать можете с него. После этого будет послан обычный alloc-init, читаете, что происходит в init. После переходите к awakeFromNib, который вызывается после инициализации объекта, загруженного из nib-файла. Только после этого NSApplicationMain создаст главный NSRunLoop приложения, который, как вы сказали, будет принимать события от пользовательского интерфейса.

Комментариев нет:

Отправить комментарий