NSNotificationCenter 通知的监听问题

NSNotificationCenter 添加监听通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti) name:@"ru" object:nil];
如果有多个对象去监听这个通知,一定要注意顺序
比如 A B C依次监听了这个通知

 1`  [[NSNotificationCenter defaultCenter] addObserver:A selector:@selector(noti) name:@"functionOne" object:nil];`
 2`  [[NSNotificationCenter defaultCenter] addObserver:B selector:@selector(noti) name:@"functionTwo" object:nil];`
 3`  [[NSNotificationCenter defaultCenter] addObserver:C selector:@selector(noti) name:@"functionThree" object:nil];`

那么 [NSNotificationCenter defaultCenter] post 发送通知的时候
A B C接收到的通知是有先后顺序的
尤其是注意 依靠或者修改单利的属性 比如登录的状态。
在B 监听的方法functionTwo中去 修改登录的状态
在A监听的方法functionOne中去判断是否登录 这样会出现问题。

还有通知要注意的一点 通知是分线程的

如果是在子线程发送的通知 只能在这个子线程去接收到通知
比如:在异步操作的回调里 处理子线程发送通知要回到主线程去发送

 dispatch_async(dispatch_get_global_queue(0, 0), ^{
        //执行完延迟操作有 现在是子线程 要回到主线程发送通知
        [NSThread sleepForTimeInterval:2.0];
        dispatch_async(dispatch_get_main_queue(), ^{
            [[NSNotificationCenter defaultCenter] postNotificationName:@"ru" object:nil];
        });
    });

你可能感兴趣的:(NSNotificationCenter 通知的监听问题)