Выполнить класс при запуске приложения в Objective-C - PullRequest
0 голосов
/ 30 марта 2011

У меня есть демонстрационное приложение, написанное на Objective-C, в котором используется класс DDHotKey Дейва ДеЛонга (блестящий пример кодирования, кстати), и мне было интересно, где мне посмотреть, как запустить класс, как только приложение начнется

В частности, в классе есть две функции: registerhotkey (registerexample1 в коде примера, предоставленного Дейвом Делонгом) и unregisterhotkeykey (unregisterexample1 в коде примера, предоставленного Дейвом Делонгом), которые я хотел бы запустить при выполнении программы и в программе закрыть соответственно.

Я не совсем уверен, как это сделать, и ищу либо руководство о том, где я должен искать, либо просто некоторые основные указатели.

Спасибо!

1 Ответ

4 голосов
/ 30 марта 2011

Самый простой способ сделать это - метод applicationDidFinishLaunching: в вашем делегате приложения.Это вызывается при запуске.Метод applicationWillTerminate: будет вызван, когда приложение собирается завершить работу.

// in application delegate
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
    // call registerhotkey
}
- (void)applicationWillTerminate:(NSNotification *)notification {
    // call unregisterhotkey
}

В качестве альтернативы, вы можете разместить вызовы в своей основной функции, вызывая registerhotkey перед вызовом NSApplicationMain и unregisterhotkey после звонка в NSApplicationMain.Если его еще нет, вам нужно добавить пул автоматического выпуска вокруг этого кода.

int main(int argc, char **argv) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    // call registerhotkey
    int result = NSApplicationMain(argc,argv);
    // call unregisterhotkey
    return result;
}

Наконец, вы можете использовать специальный метод load для вызова registerhotkey, когда класс или категориязагружен.На самом деле вам не нужно звонить unregisterhotkey, потому что система сделает это автоматически, когда ваше приложение закроется.

// in any class or category
+ (void)load {
    // call registerhotkey
}
...