通知メカニズム(NSNotification)


a、通知の発行b、通知の傍受c、通知の除去
NSNotificationCenter:            

               :

1)-(NSString *)name; //         2)-(id)object; //     (      )    3)-(NSDictionary *)userInfo; //       (                  )

         

Ø+ (instancetype)notificationWithName:(NSString*)aName object:(id)anObject;
Ø+ (instancetype)notificationWithName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;
  • (instancetype)initWithName:(NSString*)name object:(id)object userInfo:(NSDictionary*)userInfo発行通知
  • 一般的に[NSNotificationCenter defaultCenter]メソッドを使用して、通知センター通知センター(NSNotificationCenter)を作成すると、通知の発行を支援する方法が提供されます.
    n - (void)postNotification:(NSNotification*)notification; Ønotification通知を発行します.notificationオブジェクトに通知の名前、通知発行者、追加情報などのn-(void)postNotificationName:(NSString*)aName object:(id)anObjectを設定できます.ØaNameという名前の通知を発行します.anObjectはこの通知の発行者n-(void)postNotificationName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;
    aNameという名前の通知を発行します.anObjectはこの通知の発行者で、aUserInfoは追加情報です.
           
    

    •- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
    observer:リスナー、つまり誰がこの通知を受け入れるか
    aSelector:通知を受け取った後に、Listenerのこの方法をコールバックして、しかも通知の対象をパラメータとして入ってきます
    aName:通知の名前.nilの場合、通知の名前が何であれ、リスナーはこの通知を受け取ることができます.
    anObject:パブリッシャに通知します.anObjectとaNameがnilの場合、Listenerはすべての通知を受け取ることができます.
             
    

    通知センターに登録されているオブジェクトは、オブジェクトが解放される前に登録を解除する必要があります.そうでなければ、応答の通知が再び表示されると、通知センターはリスナーにメッセージを送信します.応答のリスニングオブジェクトが解放されたため、アプリケーションがクラッシュする可能性があります.
    •通知センターでは、Listenerの登録を解除する方法が用意されています.
    Ø- (void)removeObserver:(id)observer; Ø- (void)removeObserver:(id)observer name:(NSString*)aName object:(id)anObject;
    •一般的に、Listenerが破棄される前に登録を解除します(Listenerに次のコードを追加するなど).
  • (void)dealloc{/[super dealloc];非ARCでこの文を呼び出す必要がある[[NSNotificationCenter defaultCenter]removeObserver:self];}同期ですか、非同期ですか.答:同期の
  • 多くの人が質問しますが、エージェント(delegate)をいつ使うか、通知をいつ使うか(NSNotification)?delegateはone-to-one関係に対して、recieverはsenderに値を返すことができ、notificationはone-to-one/many/noneに対して、recieverはsenderに値を返すことができないので、delegateはsenderがrecieverに受け入れたい機能フィードバック値に使用され、notificationは複数のobjectのイベントに通知するために使用される