nsnotifation & GCD

2017-11-29  本文已影响2人  有理想有暴富的小青年

发送通知在哪个线程 那么接收到通知后处理也就在哪个线程中

苹果官方给我们提供的方法外,我们还可以利用基于block的NSNotification去实现,apple 从 ios4 之后提供了带有 block 的 NSNotification

-(id)addObserverForName:(NSString *)name

object:(id)obj

queue:(NSOperationQueue *)queue

usingBlock:(void(^)(NSNotification *note))block

其中:

观察者就是当前对象

queue 定义了 block 执行的线程,nil 则表示 block 的执行线程和发通知在同一个线程

block 就是相应通知的处理函数

这个 API 已经能够让我们方便的控制通知的线程切换。但是,这里有个问题需要注意。就是其 remove 操作。

原来的 NSNotification 的 remove 方式如下:

1

2

3

-(void)removeObservers{

[[NSNotificationCenterdefaultCenter]removeObserver:selfname:POST_NOTIFICATIONobject:nil];

}

但是带 block 方式的 remove 便不能像上面这样处理了。其方式如下

-(void)removeObservers{

if(_observer){

[[NSNotificationCenterdefaultCenter]removeObserver:_observer];

}

}

其中 _observer 是 addObserverForName 方式的 api 返回观察者对象

原文链接:http://m.blog.csdn.net/hmh007/article/details/61920956

上一篇下一篇

猜你喜欢

热点阅读