我对此仍然很陌生,但我在示例的帮助下一直在快速学习。我目前正在考虑将一个正在运行的程序的通知发布到另一个程序,而CFNotificationCenter就是前进的方向。唯一的问题是,我无法使用它,除了苹果的视频浏览器之外似乎没有任何例子。
是否有人能够提供一个关于如何设置它的迷你示例,以便我可以编写一个应用程序来发布通知,一个用于接收测试通知和doSomething();?非常感谢任何帮助!
答案 0 :(得分:9)
好吧,我写了一个CFNotificationCenter的小例子。通常,没有人将CoreFoundation用于大型项目,而是使用Foundation。如果你真的在Objective-C中编写这个项目(我假设你的标签),我建议使用NSNotificationCenter。没有进一步的说明,这是一个例子:
#include <CoreFoundation/CoreFoundation.h>
void notificationCallback (CFNotificationCenterRef center,
void * observer,
CFStringRef name,
const void * object,
CFDictionaryRef userInfo) {
CFShow(CFSTR("Received notification (dictionary):"));
// print out user info
const void * keys;
const void * values;
CFDictionaryGetKeysAndValues(userInfo, &keys, &values);
for (int i = 0; i < CFDictionaryGetCount(userInfo); i++) {
const char * keyStr = CFStringGetCStringPtr((CFStringRef)&keys[i], CFStringGetSystemEncoding());
const char * valStr = CFStringGetCStringPtr((CFStringRef)&values[i], CFStringGetSystemEncoding());
printf("\t\t \"%s\" = \"%s\"\n", keyStr, valStr);
}
}
int main (int argc, const char * argv[]) {
CFNotificationCenterRef center = CFNotificationCenterGetLocalCenter();
// add an observer
CFNotificationCenterAddObserver(center, NULL, notificationCallback,
CFSTR("MyNotification"), NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
// post a notification
CFDictionaryKeyCallBacks keyCallbacks = {0, NULL, NULL, CFCopyDescription, CFEqual, NULL};
CFDictionaryValueCallBacks valueCallbacks = {0, NULL, NULL, CFCopyDescription, CFEqual};
CFMutableDictionaryRef dictionary = CFDictionaryCreateMutable(kCFAllocatorDefault, 1,
&keyCallbacks, &valueCallbacks);
CFDictionaryAddValue(dictionary, CFSTR("TestKey"), CFSTR("TestValue"));
CFNotificationCenterPostNotification(center, CFSTR("MyNotification"), NULL, dictionary, TRUE);
CFRelease(dictionary);
// remove oberver
CFNotificationCenterRemoveObserver(center, NULL, CFSTR("TestValue"), NULL);
return 0;
}
此示例创建一个观察者,向其发布一个简单的字典,并删除观察者。有关CFNotificationCenter的更多信息,请访问Apple's CFNotificationCenter Reference。