NSNotificationCenter
在这里第一步和第二步的顺序可以互换,一般楼主我喜欢先在需要发送消息的页面发送消息,然后再在需要监听的页面注册监听。要注意的是不管是通知中心还是KVO都需要在页面销毁之前移除监听。
- 注册观察者
/*** 观察者注册消息通知** @param addObserver 观察者 self** @param selector 回调方法 notification** @param name 消息的名称 notifitionMassage** @param object 发送消息的对象,表示接收哪个发送者的通知,如果第四个参数为nil,则接收所有发送者的通知。*/[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notification:)name:@"notifitionMassage" object:nil];
复制代码
- 发送消息通知
/*** 发送消息通知** @param postNotificationName 发送消息的名称 notifitionMassage 这里一定要和观察者中消息的名称一致,否则监测不到消息** @param object 发送消息的对象 如果这里填nil,而且观察者要监测同时监测了好几个消息,但是这里我们只需要这一条特定的消息的时候,此时就无法达到我们想要的* 结果了。*/[[NSNotificationCenter defaultCenter]postNotificationName:@"notifitionMassage" object:nil];
复制代码
- 观察者处理消息(这个方法也就是观察者的回调方法)
/*** 观察者处理消息(这个方法也就是观察者的回调方法)** @param massage 接收到消息的信息,主要用于传值。(里面包含了Name:消息的名称 object:消息的发送者 userInfo:消息传递的数据信息)*/
-(void)notification:(NSNotification *)massage{
//在这里做我们想要的操作
}
复制代码
- 注销观察者
a. 最好的办法就是在注册观察者的页面的dealloc方法中去移除观察者
-(void)dealloc{/*** 移除观察者的方法** @param removeObserver 监听的对象 self** @param name 消息的名称** @param object 发送消息的对象 如果发送消息的时候填写了对象,那么这里就是那个对象*/
[[NSNotificationCenter defaultCenter]removeObserver:self];
}
复制代码
b. 单个移除
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"notifitionMassage" object:nil];
复制代码
复制代码