我正在写一个类别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