2

CFNotificationCenter は初めてです。私は developer.apple でドキュメントを読んでいましたが、CallbackFunction では、そのオブザーバーは「オブザーバーを識別する NULL 以外の任意の値」であると書かれています。コールバック関数内のメソッドにアクセスできるように、オブザーバーをオブジェクトにすることはできますか? これらは、ドキュメントに示されているパラメーターです。

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

別の質問です。オブザーバーを追加するときに、オブザーバーを nul にできるのはなぜですか??

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

「オブザーバー。OS X v10.3 以降では、このパラメーターは NULL の場合があります。」

4

1 に答える 1

4

observer引数は、に渡す任意のポインターでありCFNotificationCenterAddObserver、コールバック ポインターと共に格納されます。通知センターがコールバックを呼び出すと、observerポインターが引数としてコールバックに渡されます。

それでおしまい。observer通知センターはポインターを参照解除したり、保持しようとしたりしません。必要に応じて、追加情報をコールバックに渡す方法です。これを使用して Objective-C オブジェクトを参照したい場合は、可能です。オブザーバーの登録中にオブジェクトの割り当てが解除されないようにする必要があります。

于 2012-08-07T03:22:18.823 に答える