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方法中移除觀察者即可。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM