クラスメソッドをNSNotificationCenter
使用してカテゴリを作成しています:
+(void)postNotificationName:(NSString*)name onMainThread:(BOOL)mainThread withObject:(id)object;
これにより、多くの隠れた問題が発生したため、通知が配信されるスレッドを明確にするためにこれを行っています。そのため、毎回呼び出して通知を投稿するたびに余分なルックアップを行うのを避けるために[NSNotificationCenter defaultCenter]
、静的変数を 1 回だけ作成する必要があると考えました。
static NSNotificationCenter *defaultCenter;
+(void)postNotificationName:(NSString*)name onMainThread:(BOOL)mainThread withObject:(id)object
{
if(!defaultCenter)
defaultCenter = [NSNotificationCenter defaultCenter];
if(mainThread) {
dispatch_async(dispatch_get_main_queue(), ^{
[defaultCenter postNotificationName:name object:object];
});
} else {
[defaultCenter postNotificationName:name object:object];
}
}
私がしていることは安全ですか?defaultCenter
が最初にバックグラウンド スレッドで定義され、その後メイン スレッドで再度使用された場合はどうなりますか? これは問題を引き起こしていますか? これを行うより良い方法はありますか?