NSNotificationCenter
在這里第一步和第二步的順序可以互換,一般樓主我喜歡先在需要發(fā)送消息的頁面發(fā)送消息捌显,然后再在需要監(jiān)聽的頁面注冊(cè)監(jiān)聽。要注意的是不管是通知中心還是KVO都需要在頁面銷毀之前移除監(jiān)聽总寒。
- 注冊(cè)觀察者
/**
* 觀察者注冊(cè)消息通知
*
* @param addObserver 觀察者 self
*
* @param selector 回調(diào)方法 notification
*
* @param name 消息的名稱 notifitionMassage
*
* @param object 發(fā)送消息的對(duì)象扶歪,表示接收哪個(gè)發(fā)送者的通知,如果第四個(gè)參數(shù)為nil,則接收所有發(fā)送者的通知摄闸。
*/
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notification:)
name:@"notifitionMassage" object:nil];
- 發(fā)送消息通知
/**
* 發(fā)送消息通知
*
* @param postNotificationName 發(fā)送消息的名稱 notifitionMassage 這里一定要和觀察者中消息的名稱一致善镰,否則監(jiān)測(cè)不到消息
*
* @param object 發(fā)送消息的對(duì)象 如果這里填nil,而且觀察者要監(jiān)測(cè)同時(shí)監(jiān)測(cè)了好幾個(gè)消息年枕,但是這里我們只需要這一條特定的消息的時(shí)候炫欺,此時(shí)就無法達(dá)到我們想要的
* 結(jié)果了。
*/
[[NSNotificationCenter defaultCenter]postNotificationName:@"notifitionMassage" object:nil];
- 觀察者處理消息(這個(gè)方法也就是觀察者的回調(diào)方法)
/**
* 觀察者處理消息(這個(gè)方法也就是觀察者的回調(diào)方法)
*
* @param massage 接收到消息的信息熏兄,主要用于傳值品洛。(里面包含了Name:消息的名稱 object:消息的發(fā)送者 userInfo:消息傳遞的數(shù)據(jù)信息)
*/
-(void)notification:(NSNotification *)massage{
//在這里做我們想要的操作
}
- 注銷觀察者
a. 最好的辦法就是在注冊(cè)觀察者的頁面的dealloc方法中去移除觀察者
-(void)dealloc{
/**
* 移除觀察者的方法
*
* @param removeObserver 監(jiān)聽的對(duì)象 self
*
* @param name 消息的名稱
*
* @param object 發(fā)送消息的對(duì)象 如果發(fā)送消息的時(shí)候填寫了對(duì)象,那么這里就是那個(gè)對(duì)象
*/
[[NSNotificationCenter defaultCenter]removeObserver:self];
}
b. 單個(gè)移除
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"notifitionMassage" object:nil];