2012-08-07 30 views
1

我是CFNotificationCenter的新手。我正在阅读developer.apple上的文档,它说在CallbackFunction中,观察者是“非NULL的任意值,用于标识观察者”。观察者是否可以成为一个对象,以便我可以在回调函数中访问它的方法? 这些是文档中显示的参数。什么是CFNotificationCenter回调函数观察器?

void MyCallBack (
     CFNotificationCenterRef center, 
     void *observer, 
     CFStringRef name, 
     const void *object, 
     CFDictionaryRef userInfo 
    ); 

另一个问题。为什么添加观察者时允许观察者为零?

void CFNotificationCenterAddObserver (
    CFNotificationCenterRef center, 
    const void *observer, 
    CFNotificationCallback callBack, 
    CFStringRef name, 
    const void *object, 
    CFNotificationSuspensionBehavior suspensionBehavior 
); 

“观察者:在OS X v10.3及更高版本中,此参数可能为NULL。”

回答

3

observer参数是一个任意指针,您传递给CFNotificationCenterAddObserver,它与您的回调指针一起存储。当通知中心调用您的回调函数时,它会将observer指针作为参数传递给回调函数。

就是这样。通知中心不取消引用observer指针,或尝试保留它。如果需要,您可以通过这种方式将额外信息传递给您的回拨。如果你想用它来引用一个Objective-C对象,你可以。您应该确保在观察者注册时不会释放对象。