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];