Здесь есть несколько больших вопросов, на которые очень сложно ответить в сообщении о переполнении стека.
1)
А. Что такое владелец файла?
Перо - это файл, верно? Так что бы иметь файл пера? Ну, владельцем является любой объект, который вы называете initFromNib: on.
AClassName *theOwner = [[AClassName alloc] initFromNib:@"nibfile"];
Файл пера - это просто высушенный объект, описание объекта, сериализация объекта. Объект часто лиофилизируют с помощью множества вспомогательных объектов, чтобы его можно было разморозить и готово к работе. Напомните мне, как египетские фараоны были похоронены со многими своими слугами и многими своими владениями, они были бы готовы отправиться в загробную жизнь. Владелец является основным объектом, который был заморожен. В замороженном состоянии (файл пера) владелец заморожен, и вы не можете с ним работать. Когда вы размораживаете загрузку nib-файла, основной объект, который размораживается, является владельцем.
B. Что такое первый ответчик?
Когда вы взаимодействуете со своей программой, касаясь экрана, встряхивая телефон, печатая на клавиатуре, программа должна реагировать на это событие, многие другие платформы называют это обработкой событий или действий. Первый ответчик - это первый объект, который реагирует на взаимодействия пользователя. Обычно это будет NSView, к которому прикасается пользователь, который отвечает путем перерисовки и отправки обновленной информации в контроллер представления (помните, NSView наследуется от NSResponder - теперь вы знаете, почему).
Он находится в файле пера, так что вы можете переопределить типичное поведение. Cocoa Framework также используется для Mac, поэтому программистам может потребоваться, чтобы один объект обрабатывал ввод с клавиатуры, а не позволял каждому представлению обрабатывать сам ввод с клавиатуры. Это редко используется непосредственно в программах iPhone, потому что вы обычно хотите, чтобы пользователь касался реакции на взаимодействие с пользователем (перерисовывал сам) и передавал обновления. Таким образом, вы обычно можете просто игнорировать его в файле пера.
C. Что такое делегат?
Что делает человек, когда делегирует? Они говорят кому-то еще сделать эту работу за них и отчитаться. Люди делегируют все время. Я делегирую починить мою машину автомеханику. Я делегирую приготовление ужина повару в ресторане, в котором я обедаю. «Джонсон, мне нужно, чтобы ты написал для меня отчет TMI», - сказал мой босс, делегировавший мне, потому что я был экспертом компании по TMI. Классы в коде ничем не отличаются.
Делегат в Интерфейсном Разработчике является делегатом Приложения. Класс UIApplication собирается передать ему множество обязанностей, отправляя сообщения методам, определенным в протоколе UIApplicationDelegate. Например, если ваш делегат реализует метод applicationDidFinishLaunching: , он получит сообщение после того, как экземпляр UIApplication инициализирует и завершит свою процедуру запуска.
D. Где чертежный код?
Apple предоставила Framework в таких классах, как NSView, NSWindow, NSTableView, и она не имеет открытого исходного кода, поэтому вы не можете просматривать исходный код. Но причина, по которой окно запускается и появляется при первом запуске приложения, созданного на основе одного из шаблонов Apple, перед добавлением собственного кода, связана с тем, что происходит в файле main.m .
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Вызов UIApplicationMain (argc, argc, nil, nil) начинает все вращаться. Он загружается в файл пера, чтобы разморозить объект UIApplication и другие объекты в файле пера. Затем он просит приложение запустить основной цикл. После размораживания объекта UIApplication (владельца пера) он сообщает, что его MainWindow следует отобразить на экране iPhone, и держит UIApplicationDelegate в цикле о том, что происходит.
Ну, это мой ответ на 1). Надо было написать время, надеюсь, это поможет. Одна вещь, которая действительно помогла мне понять: создание нового проекта приложения на основе окна, удаление MainWindow.nib, а затем попытка воссоздать его из пустого файла пера, чтобы он функционировал таким же образом.