Как добавить метод обратного вызова к слушателю событий Apple, например:
CFRunLoopSourceRef IOPSNotificationCreateRunLoopSource(IOPowerSourceCallbackType callback,
void *context);
Как добавить метод или блок к следующему методу, чтобы при изменении источника питания я мог записывать что-то вроде ниже (я вижу, что это C++, но NSLog по-прежнему работает в Obj- C++):
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
CFRunLoopSourceRef IOPSNotificationCreateRunLoopSource(callbackMethod(),
void *context);
}
void callbackMethod(){
// NSLog("No power connected"); or NSLog("Power connected");
}
Думаю, мне нужно изменить:
IOPowerSourceCallbackType callback
на указатель или что-то еще?
В документации не IOPowerSourceCallbackType
тип IOPowerSourceCallbackType
, но он объявлен в <IOKit/ps/IOPowerSources.h>
как:
typedef void (*IOPowerSourceCallbackType)(void *context);
Это означает, что вы определили бы свой обратный вызов как:
void callback(void *context)
{
// ...
}
Вы передадите это в IOPSNotificationCreateRunLoopSource
используя следующий код:
CFRunLoopSourceRef rls = IOPSNotificationCreateRunLoopSource(callback, whateverValueIsMeaningfulToYourCallback);
CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
CFRelease(rls);
Вы хотите тщательно рассмотреть, какой цикл цикла вы хотите запланировать источник и в каком режиме. Если вам нужно еще раз добавить материал источника цикла (rls
) в последующие моменты времени, не отключайте его немедленно. Храните его в переменной экземпляра или что-то в этом роде и отпустите его, когда закончите с ним. В частности, в какой-то момент вам может потребоваться аннулировать его с помощью CFRunLoopSourceInvalidate()
.