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