在ios開發(fā)中,我們會經(jīng)常遇到需要在頁面A和頁面B之間通信的需求,這一需求我們可以用Block、協(xié)議、通知等方法實現(xiàn)。今天談?wù)勍ㄖ挠梅ā?/h4>
有人會問,既然以上幾種方式都可以實現(xiàn)這一需求,那么為什么要用通知呢?
這就要談到NSNotification的特點
- 可以實現(xiàn)一對多,NSNotification 的實際是一種觀察者模式。
每一個ios程序都有著唯一的一個通知中心,我們使用時通過[NSNotificationCenter defaultCenter]獲取。而它的運行其實相當(dāng)于一個廣播站。
在使用中,我們只需要兩步。
- 發(fā)通知
- 收通知
其中,我們需要在要接通知的類中注冊觀察者
NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
//添加當(dāng)前類對象為一個觀察者,name和object設(shè)置為nil,表示接收一切通知
[center addObserver:self selector:@selector(yourMethod) name:@"yourName" object:nil];
其中@selector(yourMethod)為接收到通知所會執(zhí)行的方法,name為通知的名稱,設(shè)置后此通知中心只會接收通知名為'name'的通知,同理object
object為通知所帶參數(shù)對象的類
此后,在需要發(fā)送通知的地方,我們只需要創(chuàng)建一個NSNotification實例,并將通知發(fā)送出去即可。
NSNotification * notice = [NSNotification notificationWithName:@"name of notification" object:nil userInfo:@{@"1":@"123"}];
//發(fā)送消息
[[NSNotificationCenter defaultCenter]postNotification:notice];
我們可以在object和userInfo中添加自己所需要傳遞的參數(shù),若不用,則設(shè)為nil。其中,我們在接收通知的方法中,通過(NSNotification*)text; text.object的方法來獲取到傳遞的object對象的內(nèi)容。
至此,通知的基礎(chǔ)使用就說完了。需要記住的是,一個通知中心可以通過name和object參數(shù)來控制自己所能接到的通知,若都為nil,則可以接收到所有通知。所以,我們在使用過程中要注意控制通知的接收者。
Tino Wu