我正在寫一個類別NSNotificationCenter
與類方法:靜態變量和多線程在Objective-C
+(void)postNotificationName:(NSString*)name onMainThread:(BOOL)mainThread withObject:(id)object;
我這樣做是爲了確保我明確跟哪個線程我的通知已發送,因爲這導致了很多隱藏的問題。所以只是爲了避免每次調用[NSNotificationCenter defaultCenter]
每次我發佈一個通知的時間做一個額外的樣子了,我想我必須只創建一個靜態變量一次:
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
最初在後臺線程上定義,然後在主線程上再次使用,該怎麼辦?這是否會造成麻煩?有一個更好的方法嗎?
爲什麼將它存儲在局部變量中呢?通話結束後,它會消失,不是?你的意思只是[NSNotificationCenter defaultCenter] postNotifi ...]每一次? – Snowman 2012-08-16 15:23:34
我以爲你多次調用它,但我看到你只是在一個if/else語句中調用它,所以不需要將它存儲在一個變量中。 – Joe 2012-08-16 15:24:38