「NSNotification はオブジェクトを保持しますか? (NSMutableDictionary または Array と同様の方法で) ... 通知を投稿した後にオブジェクトを解放できることを意味します」
object
およびパラメータがそのメソッドによって保持されているかどうかはわかりませんuserInfo
が、実際には問題にはなりません。
NSNotificationCenter
これらの通知を作成し、非同期でブロードキャストすることを想像していると思いますが、そうではありません。NSNotificationCenter
( NSNotificationCenter Class Referenceを参照)のドキュメントに記載されているように、通知は同期的に投稿されます。
通知センターは、オブザーバーに同期的に通知を配信します。つまり、
postNotification:
すべてのオブザーバーが通知を受信して処理するまで、メソッドは返されません。通知を非同期に送信するには、 を使用します
NSNotificationQueue
。マルチスレッド アプリケーションでは、通知は常に、通知が投稿されたスレッドで配信されます。これは、オブザーバーが自身を登録したスレッドと同じではない場合があります。
したがって、コードでは、通知センターが通知を作成し、デフォルト センターを介してブロードキャストします。この通知名とオブジェクトの組み合わせに登録されているすべてのオブジェクトは、通知を受け取り、その通知に登録したときに指定したセレクターを実行します。その後、制御は通知を送信したクラスに戻ります。
言い換えれば、コードが[teamDictCopy release]
行に到達するまでに、teamDictCopy
will はすべての関係者によって既に「使用」されています。したがって、それを解放することに危険はないはずです。
慣習についてのメモ。通常、object:
パラメーターは通知を送信するオブジェクトを意味し、パラメーターは追加情報をuserInfo:
意味します。NSDictionary
したがって、通常、次のように通知を処理します。
NSMutableDictionary *teamDictCopy = [self.teamDict mutableCopy];
[teamDictCopy setObject:
[NSNumber numberWithInt:self.scrollViewIndex] forKey:@"imageIndex"];
if([self.statusButton.title isEqualToString:@"Completed"]){
[[NSNotificationCenter defaultCenter] postNotificationName:@"UnComplete"
object:self userInfo:teamDictCopy];
}
[teamDictCopy release];