Какао: основная функция int - PullRequest
6 голосов
/ 21 января 2010

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

#import <Cocoa/Cocoa.h>


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

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

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

Ответы [ 5 ]

10 голосов
/ 21 января 2010

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

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

5 голосов
/ 21 января 2010

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

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

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

4 голосов
/ 21 января 2010

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

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

Также обратите внимание, что это не из Objective-C. Это просто C.

Посмотрите на Страница Википедии на ней

0 голосов
/ 22 января 2010

Мне интересно, где начинается код выполнение (например, почему NSView подкласс выполнить и рисовать без меня явно называть это?) и если я не должен вставить мой основной цикл в Int main () куда это идет?

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

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

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

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

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

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

0 голосов
/ 22 января 2010

Значение, возвращаемое из main, возвращается процессом в операционную систему после завершения процесса.

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

> ls
a b c

> echo $?
0

> ls x
x: No such file or directory

> echo $?
1

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

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

...