Вы можете удалить часть отражения и просто передать типы вручную. Отражение - медленная задача, и вы не можете ожидать быстрого опыта с чем-то, что использует отражение, но, поскольку это только для первого соединения, мне лично было бы все равно, если не так важно начать очень быстро.
Необходимо вызвать - [NSApplication, выполненный] вместо - [[NSRunLoop currentRunLoop], выполненный]. Причина должна быть ясной при рассмотрении базовой структуры метода:
- (void)run
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self finishLaunching];
shouldKeepRunning = YES;
do
{
[pool release];
pool = [[NSAutoreleasePool alloc] init];
NSEvent *event =
[self
nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
dequeue:YES];
[self sendEvent:event];
[self updateWindows];
} while (shouldKeepRunning);
[pool release];
}
NSApplication инкапсулирует много о том, как получить событие, как диспетчеризировать их и как обновить окна.
Я узнал, как создать окно в Какао программно …
Почему? Почему не только делают перо?
Окно не реагирует на запрос Выхода или нажатие кнопки.
Как Вы вышли бы из окна? Это не Windows 3; приложения могут иметь несколько окон на Mac OS X. По сути, закрытие окна и выход из приложения являются отдельными действиями.
[[NSRunLoop currentRunLoop], выполненный];
Кроме редких обстоятельств, выполняя цикл выполнения задание NSAPPLICATION, и необходимо оставить это ему. Использовать NSApplicationMain
или -[NSApplication run]
сказать приложению работать.
Превосходный вопрос. Я думаю, что Matt Gallagher уже ответил на это, но если Вы хотите пойти далее с этим, необходимо будет копаться в документации обработки событий Apple. Примите во внимание, что выполнение всего программно потребует основательного понимания основных принципов какао.