對象之間進(jìn)行通信最基本的方式就是消息傳遞,在Cocoa中提供Notification Center機(jī)制來完成這一任務(wù)。其主要作用就是負(fù)責(zé)在任意兩個對象之間進(jìn)行通信。使用方法很簡單,如下幾個步驟即可:
假設(shè)A與B之間進(jìn)行通信,B來觸發(fā)事件,A接受該事件,并作出響應(yīng)。
1) A編寫自定義的消息響應(yīng)函數(shù)update
2) A向消息中心注冊,[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(update) name:@"update" object:nil]
3) B觸發(fā)事件[[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil]
每一個進(jìn)程都有一個默認(rèn)的NSNotificationCenter,可以通過類方法defaultCenter獲取該消息中心的實例。消息中心可以處理同一進(jìn)程中不同對象之間的消息。如果要在同一臺機(jī)器上進(jìn)行進(jìn)程間的通信,需要使用NSDistributedNotificationCenter。
消息中心以同步的方式將消息分發(fā)到所有的觀察者中,換言之,直到所有的觀察者都收到消息并處理完畢以后,控制權(quán)才會回到調(diào)用者的手里。如果需要異步的處理消息,需要使用通知隊列NSNotificationQueue。
在多線程程序中,通知會被分發(fā)到每一個發(fā)起消息的線程中,這可能與觀察者注冊時所在的線程已經(jīng)不是同一線程。