В Какао, какова цель класса main.m?
Нет, потому что его нет.
Во-первых, файл .m не является классом. Ни то, ни другое Практика помещения @interface
класса в файл .h (заголовок) и его @implementation
в файл .m (реализация) является соглашением, не более того. Это хорошее соглашение, но оно не поддерживается языком.
Итак, файл .m содержит ноль или более реализаций классов. Обычно это ровно один. Иногда это два, где другой - маленький закрытый класс, чей @interface
также находится в том же файле.
main.m не содержит классов. Обычно он содержит только одну функцию с именем main
.
main
происходит от C (из которых Objective-C является надмножеством) и является точкой входа в программу: именно там начинается запуск программы. Все происходит здесь или в функции, вызываемой здесь. Инструмент командной строки обычно также завершает работу, возвращая main
.
Большинство main
функций в приложениях Какао являются функциями по умолчанию, которые поставляются с шаблоном проекта; эта реализация просто выполняет хвостовые вызовы NSApplicationMain
, которые настраивают общий объект NSApplication и запускают его. Эта функция никогда не возвращается; когда пользователь выходит из приложения Какао, процесс просто завершается.
Вы можете прочитать этот список важных фактов о Какао и Objective-C , которые я написал. Похоже, у вас есть некоторые заблуждения (вероятно, перенесенные из другой структуры, с которой вы более знакомы), и этот список может быть вам понятен.
Как запустить код независимо от действий пользовательского интерфейса (например, не только в ответ на нажатие кнопки)?
Это зависит от того, когда вы пытаетесь это сделать. Например, периодическим действием будет задание для таймера .
Я пытаюсь инициализировать некоторые объекты и запустить некоторые сценарии ДО ТОГО, как я пробудуFromNib. Как мне это сделать?
Вы можете сделать это в initWithCoder:
, который отправляется каждому объекту, не относящемуся к уровню отображения, который создается из архива, включая ваш. Перья тоже архивы.
Вы также можете рассмотреть возможность использования в качестве делегата приложения и реализации a applicationWillFinishLaunching:
метода .
Третий способ - вставить код в main
. Обратите внимание, что практически любой код Какао здесь может регистрировать предупреждения «без пула автоматического выпуска », если вы не включите его в оператор @autoreleasepool
; другие решения не имеют этой проблемы, потому что NSApplication уже создал пул автоматического выпуска.