翻譯的美國大作家歷史小說《明日此時》,亞馬遜已經(jīng)有電子版可以購買閱讀
Notification Center的概念:
它是一個單例對象曙咽,允許當事件發(fā)生時通知一些對象,讓對象做出相應反應。
它允許我們在低程度耦合的情況下底瓣,滿足控制器與一個任意的對象進行通信的目的。 這種模式的基本特征是為了讓其他的對象能夠接收到某種事件傳遞過來的通知,主要使用通知名稱來發(fā)送和接收通知捐凭。
基本上不用考慮其它影響因素拨扶,只需要使用同樣的通知名稱,監(jiān)聽該通知的對象(即觀察者)再對通知做出反應即可茁肠。
本文的demo 下載地址?
優(yōu)勢:
1.不需要編寫多少代碼患民,實現(xiàn)比較簡單;
2.對于一個發(fā)出的通知垦梆,多個對象能夠做出反應匹颤,簡單實現(xiàn)1對多的方式,較之于?Delegate?可以實現(xiàn)更大的跨度的通信機制托猩;
3.能夠傳遞參數(shù)(object和userInfo)印蓖,object和userInfo可以攜帶發(fā)送通知時傳遞的信息。
缺點:
1.在編譯期間不會檢查通知是否能夠被觀察者正確的處理京腥;
2.在釋放通知的觀察者時赦肃,需要在通知中心移除觀察者;
3.在調(diào)試的時候公浪,通知傳遞的過程很難控制和跟蹤他宛;
4.發(fā)送通知和接收通知時需要提前知道通知名稱,如果通知名稱不一致欠气,會出現(xiàn)不同步的情況厅各;
5.通知發(fā)出后,不能從觀察者獲得任何的反饋信息晃琳。
NSNotification 的3種使用方式
1讯检、不傳遞參數(shù), 最常用的一種
// 發(fā)送通知
-(void)btn1Click
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"noti1" object:nil];
}
//監(jiān)聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti1) name:@"noti1" object:nil];
//調(diào)用方法
-(void)noti1
{
NSLog(@"接收 不帶參數(shù)的消息");
}
2、使用object 傳遞消息
//發(fā)通知
-(void)btn2Click:(UIButton *)btn
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"noti2" object:[NSString stringWithFormat:@"%@",btn.titleLabel.text]];
}
//監(jiān)聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti2:) name:@"noti2" object:nil];
//調(diào)用方法
-(void)noti2:(NSNotification *)noti
{
//使用object處理消息
NSString *info = [noti object];
NSLog(@"接收 object傳遞的消息:%@",info);
}
3卫旱、使用userInfo 傳遞消息
//發(fā)通知
-(void)btn3Click
{
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"userInfo消息" forKey:@"param"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"noti3" object:nil userInfo:dic];
}
//監(jiān)聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti3:) name:@"noti3" object:nil];
//調(diào)用方法
-(void)noti3:(NSNotification *)noti
{
//使用userInfo處理消息
NSDictionary? *dic = [noti userInfo];
NSString *info = [dic objectForKey:@"param"];
NSLog(@"接收 userInfo傳遞的消息:%@",info);
}
最后人灼,記得在發(fā)送通知消息的頁面,在dealloc方法里面移除觀察者顾翼。
-(void)dealloc
{
//移除觀察者投放,Observer不能為nil
[[NSNotificationCenter defaultCenter] removeObserver:self];
}