Какао: международная основная функция

Мне любопытно, какую роль международная основная функция играет в программе Какао? Фактически весь пример кода, на который я смотрел, имеет только следующий код в main.m:

#import <Cocoa/Cocoa.h>


int main(int argc, char *argv[])
{

    return NSApplicationMain(argc,  (const char **) argv);
}

Что точно это делает, и где программа на самом деле начинает ступать посредством команд? Кажется, что для моих концепций нужна реорганизация.

6
задан Amicable 30 April 2014 в 13:59
поделиться

5 ответов

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

Apple имеет очень глубокое обсуждение в этом под руководством Руководство по какао-основам: основной архитектуре приложений на Mac OS X

10
ответ дан 8 December 2019 в 12:20
поделиться

Главная () - это точка входа для вашей программы.

Когда вы запускаете свою программу, которая вызывается первая функция. Ваша программа заканчивается при выходе из этой функции.

также обратите внимание, что это не происходит от объекта-с. Это просто C.

взглянуть на Страница Википедии на ней

4
ответ дан 8 December 2019 в 12:20
поделиться

Значение, возвращаемое от Main, возвращается процессом для операционной системы, когда процесс выполнен.

Shell хранит значение, возвращаемое последним процессом, и вы можете вернуть его с $? :

> ls
a b c

> echo $?
0

> ls x
x: No such file or directory

> echo $?
1

LS - это приложение, как и все остальное.

Вы можете использовать возвращаемое значение для цепи нескольких процессов вместе с помощью скрипта оболочки или что-то еще, что может выполнить процесс и проверку возврата.

0
ответ дан 8 December 2019 в 12:20
поделиться

Мне интересно, где начинается код выполнение (вроде почему, почему nsview Подкласс выполняется и ничья без меня явно зовут это?) И если я не должен придерживаться основной петли в INT Главная () Откуда он идет?

В проекте Xcode у вас есть файл Main.m, который содержит функцию «int Main». На самом деле вы не найдете код, который вызывает NSView Draw Counce, этот код скрыт глубоко в рамках iPhone или Mac OS X. Просто знайте, что есть цикл событий, скрытая глубоко в вашем «int Main», которая проверяет изменения, чтобы он знал, когда обновить ваш вид. Вам не нужно знать, где находится эта петля событий, это не полезная информация, поскольку вы можете переопределить методы или создавать и назначать делегаты, которые могут делать вещи, когда это произойдет.

Чтобы получить лучший ответ, вам нужно будет объяснить, что вы подразумеваете под «основным циклом», которые вы хотели поставить в функцию «INT MAIN».

Это просто странно для меня от Маленький опыт в C ++. Это выглядит неестественное, что основная функция будет Будь таким пустым.

Вы можете инкапсулировать миллиард строк кода в одну функцию и поместить его в «INT MAIN». Не обманывайтесь основным, имеющим несколько строк, что сделано специально. Хорошее программирование учит нас держать код в определенных контейнерах, чтобы оно хорошо организовано. Apple решила сделать «реальную» точку запуска своих приложений для iPhone в этой одной линейке кода внутри файла Main.m:

int retVal = UIApplicationMain(argc, argv, nil, @"SillyAppDelegate");

из этого файла кода, делегат приложения запускается и не будет возвращать управление на Основная функция, пока это не сделано.

0
ответ дан 8 December 2019 в 12:20
поделиться

Если вы хотите узнать, как передаётся управление от "start this" к функции main(), то man-страница execve имеет подробности. Вы также захотите прочитать о dyld. main() является частью стандарта Unix. Каждая программа, которую вы можете эффективно запустить, имеет main().

Как упоминали другие, NSApplicationMain передаёт управление Cocoa. Документация достаточно специфична в отношении того, что она делает.

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

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