Отношения между AppDelegate и main.m

Хорошо, я полностью плохо знаком с obj-c + какао, таким образом, это, вероятно, очевидно, но здесь идет:

Я перемещался от приложений командной строки до приложений какао в изучении, как работать с целью-c в XCode. Одной вещью, которую я действительно не понимаю, является роль AppDelegate и как это соединяется с main.m

Кажется, что Вы могли поместить свою всю программу в appdelegate, и это будет хорошо работать, и Вам даже не нужен main.m, но не наоборот при создании приложения какао, у Вас должен, по крайней мере, быть appdelegate.

Я сделал большую php веб-разработку и инструменты командной строки, таким образом, я предполагаю то, что я ищу, файл, который программа выполнит сначала и предназначается для "управления" остальной частью их.

Кто-либо может помочь мне понять то, что продолжается в программе Какао, как AppDelegate и main.m (или не), связанный, и что поток программы, как предполагается?

8
задан Andrew 12 August 2010 в 01:12
поделиться

2 ответа

Ключевой особенностью многих объектно-ориентированных систем (таких как Cocoa) является «инверсия управления» , что в основном означает, что инфраструктура выполняет все, и любой код, который вы пишете, находится под его контролем.

Итак, в отличие от PHP, вы не пишете код, который выполняется при запуске. Что вы делаете, так это определяете методы для делегата приложения, контроллеров, представлений и других объектов и позволяете фреймворку вызывать эти методы по мере необходимости. Вы никогда не увидите общего «потока контроля» на протяжении всей программы; вы будете видеть это только по мере того, как управление перетекает в ваши части программы.

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

В приложении Какао большая часть логики приложения будет фактически находиться в контроллерах представления, а не в делегате приложения. Делегат приложения обычно выполняет обязанности по запуску и завершению работы, но другие объекты выполняют большую часть работы между запуском и завершением работы. Так что не пытайтесь втиснуть все в делегат приложения.

8
ответ дан 5 December 2019 в 08:50
поделиться

main.m содержит функцию main () , которая является точкой входа для программы, она запускается первой. Затем он вызывает UIApplicationMain () , который выполняет настройку приложения для конкретной ОС, и загружает основной файл Interface Builder .xib , содержащий экземпляр делегата вашего приложения.

То есть без main.m ваш делегат приложения даже не загрузился бы.

11
ответ дан 5 December 2019 в 08:50
поделиться