2012-08-07 33 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對象,你可以。您應該確保在觀察者註冊時不會釋放對象。