備忘録

開発でつまったところの備忘録.不定期に更新します.

通知センター

何かの事象の発生を複数のオブジェクトに発信したいとき、通知と呼ばれるメッセージ送信方式を使います。

 

プログラム内に通知センタと呼ばれるオブジェクトが用意されており、あるオブジェクトがメッセージ送信の依頼を通知センタに送る(ポスト)と、その通知を受け取るように登録されているオブジェクト(オブザーバ)に対してメッセージが一斉に送られます。

 

通知のポストはどのオブジェクトでも自由にでき、ポスト側とオブザーバ側の共通の知識は通知の名前のみで大丈夫です。これにより双方の独立性を損なわずに複数オブジェクトへのメッセージ送信を実現できます。

 

通知センタに何かをポストするときはNSNotificationクラスのインスタンス(通知オブジェクト)にまとめて通知センタに渡します。オブザーバが通知を受け取る際にもこのオブジェクトが引数に渡されます。

 

通知センタはNSNotificationCenterというクラスのインスタンスとして実装されています。各プロセスに一つあらかじめ用意されているため、通常は自分で用意する必要はありません。

+ (id) defaultCenter ;

[ NSNotificationCenter defaultCenter ]

というクラスメソッドで取得できます。

 

通知をポストするには通知センタの

- (void) postNotification : (NSNotification *) notification object : (id) anObject userInfo : (NSDictionary *) userInfo ;

メソッドで通知オブジェクトを指定してできます。

 

オブザーバとしてオブジェクトを登録するには

- (void) addObserver : (id)anObserver selecter : (SEL) aSelecter name : (NSString *) notificationName object : (id) anObject ;

として受け取る通知やその際に実行するセレクタを指定して登録します。特定のオブジェクトからの通知のみ受け取りたい場合はobjectにそれを登録します。

オブザーバオブジェクトには

- (void) XXXXXXX : (NSNotification *) notification ;

の形のメソッドを定義する必要があります。