通知メカニズム(NSNotification)
2242 ワード
a、通知の発行b、通知の傍受c、通知の除去
Ø+ (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のイベントに通知するために使用される
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;
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に次のコードを追加するなど).