1. 程式人生 > >Objective-C中的老闆是這樣發通知的(Notification)

Objective-C中的老闆是這樣發通知的(Notification)

    ​    ​通知(Notification)簡單的類比一下,公司的老總給下面的員工發通知啦,說明天公司要上市,各部門做一下準備工作。等通知發完,各部門收到後各司其職,做著自己該做的東西。假如Boss是通過公司的內部論壇傳送的通知,那麼Boss就是傳送通知的物件,而公司員工就是通知的接受方,而公司的內部論壇就是通知中心,員要想接收到Boss傳送的通知的前提是先在論壇上註冊一下。老闆只有一個,而接受通知的有多個部門,老闆是通過論壇廣播的形式傳送的通知。說的高大上一點,通知是一種傳送給一個或多個觀察著,用來通知其在程式中發生了某個事件的訊息。Cocoa中的通知及時遵循的是一種廣播的模式。

    ​    ​暫且這麼類比著,這是根據我個人理解而想出的例子,可能會有不足之處,希望大家批評指正,轉載請註明出處。

    ​    ​廢話少說,我們如何把上面boss通過論壇發帖的形式來發送通知用Objective-C中的Notification來實現呢,程式碼走起

    ​    ​1.一個公司得有老闆對吧,所以我們要新建一個老闆類,公司的內部論壇就是我們OC中的通知中心(NotificationCenter),看完老闆的實現程式碼在說兩句吧

1 2 3 4 5 6 7 8 9 10 11 12 13 14 @implementation Boss -(void)sendMessage { //把要傳送的資訊放入字典中(boss要在論壇中說的話)
NSDictionary *message = @{@"notification" : @"大家注意啦,明天公司上市!"}; //建立通知物件(老闆登陸boss賬號) NSNotification * notification = [NSNotification notificationWithName:@"boss" object:self userInfo:message]; //向通知中心傳送訊息(釋出訊息) [[NSNotificationCenter defaultCenter] postNotification:notification]; } @end

    ​    ​程式碼說明:

    ​    ​    ​    ​1.老闆要發的訊息要放在字典中才能釋出,字典的key是帖子的主題,value是帖子的內容

    ​    ​    ​    ​2.建立通知物件就好比老闆登陸內部論壇,用notificationWithName設定老闆的暱稱

    ​    ​    ​    ​3.向通知中心傳送訊息就是老闆發帖啦

    ​2.下面我們就開始模擬各個部門接受通知後要做的事情,人力資源部接到通知後要做的事兒

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 @implementation HumanResources - (instancetype)init { self = [super init]; if (self) { //現在通知中心註冊,確定要接受誰的訊息,(登陸論壇,關注老闆) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSomething:) name:@"boss" object:nil]; } return self; } -(void)doSomething:(NSNotification *)notification { //接受訊息,(從論壇上看到啦boss的訊息) NSDictionary *bossInfo = [notification userInfo]; //輸出收到的資訊 NSLog(@"人力資源部門收到:%@", bossInfo[@"notification"]); } @end

    ​程式碼說明:

    ​    ​1.註冊為觀察者相當於各部門要在內部論壇註冊並關注老闆,在關注老闆的同時指定當老闆傳送通知時自己要做些什麼事兒

    ​    ​2.doSomething裡是各部門要做的事情

    ​3.再新增一個財務部,和上面的程式碼類似,在這就不寫了

    ​4.在main函式裡做如下的測試

1 2 3 4 5 Boss * boss = [[Boss alloc] init]; Finance * finance = [[Finance alloc] init]; HumanResources *hr = [[HumanResources alloc] init]; //老闆發訊息啦 [boss sendMessage];

    ​當老闆發通知時,各部門會自動調取自動執行的方法,執行結果如下:

1 2 2014-08-20 15:10:29.816 Memory[1946:303] 財務部門收到:大家注意啦,明天公司上市! 2014-08-20 15:10:29.817 Memory[1946:303] 人力資源部門收到:大家注意啦,明天公司上市!

  最後呢,也是最重要的,登入完論壇如果你不使用了,要登出也就是要退出。那麼通知也是一樣的,你需要在dealloc方法中移除觀察者即可。

​    上面的總結暫且這麼說吧,是根據筆者自己的理解所總結的內容,不免有偏頗之處,歡迎批評指正,轉載請註明出處。