什麼是notification?
個人的理解,就是某個人在某個部門註冊成為會員,也就是我們下面說道的註冊稱為監聽者,讓監聽者替你監聽某個事件,當監聽者監聽到某事件後,就發送通知:postNotification 給nsnotificationCenter,然後監聽者執資料列選取器中的方法。下面簡單介紹一下這個過程:
首先要註冊監聽器:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(goChange:) name:@"ChangeColor" object:nil];
最後的object:後我們用的是nil 表明是給所有的監聽者發送資訊,如果寫的是某一個對象,則只給該對象發送通知。
其中就我的考慮:NSNotificationCenter 就像是一個存放訊息的容器,我們既可以向裡面存放資訊,也可以從裡面提取資訊。
goChange:方法的實現如下:
-(void)goChange:(NSNotification *)notification
{
//拿到通知內容。
NSDictionary *dic = [notification userInfo];
NSString *colorString = [dic objectForKey:@"color"];
UIColor *color = nil;
if ([colorString isEqualToString:@"red"]) {
color = [UIColor redColor];
} else if ([colorString isEqualToString:@"blue"]){
color = [UIColor blueColor];
}
self.view.backgroundColor = color;
}
所實現的功能就是:我有兩個按鈕,當點擊red按鈕時,背景顏色變為紅色,當點擊藍色按鈕時背景顏色變為藍色。其中兩個按鈕設定的方法如下:
redButton:
-(void)setRedColor
{
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"red" forKey:@"color"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"ChangeColor" object:self userInfo:dic] ;
}
blueButton:
-(void)setBlueColor
{
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"blue" forKey:@"color"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"ChangeColor" object:self userInfo:dic];
}
然後就是這一句:
[[NSNotificationCenter defaultCenter]postNotificationName:@"ChangeColor" object:self userInfo:dic];
postNotification的作用是儲存參數,並把這個建立的notification發送給NSNotificationCenter;
我的理解就是:當點擊按鈕的時候,看notificationName如果這個name跟postNotificationName相同,則通知發送成功,執行監聽者選取器的方法。就達到了通知你個人的目的。
如有疑問,歡迎提出,這也是我剛開始寫技術性的部落格文章,肯定會有很多漏洞,歡迎批評指正,相信我會越做越好。