通知的用法

今天做項目竟然忘了通知怎么用,可能是block用多了把...

怒寫一篇通知博客,給自己長點記性!!!

系統給我們準備了一個>單例<設計模式的消息中心

[NSNotificationCenter defaultCenter]

為什么是單例呢,比如在內存中只能存在一個的類(比如說音樂播放器,數據庫隊列(FMDB)等),或者常用的工具類(比如網絡請求/賬號管理/操作數據庫/APP配置等),還有我們要認識的通知中心.這些都需要設計成單例模式,方便使用,節省內存,保證數據安全等.相對的,單例模式也有它的缺點.它不應該頻繁創建,因為每創建一個單例對象,它就會在內存中永久存在,直到程序退出.
我們可以從單例的實例化方法得出以上結論:

+ (instancetype)sharedTool {
    
    static NetWorkTool *instance;
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        ///子類調用父類實例化方法
        instance = [self manager];
    });
    return instance;
}

這是一個AFN網絡管理工具的單例模式,結合GCD的高級功能.

好了,繞了一大圈,讓我們回到通知

我們先來看發送通知的方法(以post開頭):

 - (void)postNotificationName:消息名字 
                                     object:發送消息的對象
                                  userInfo:傳遞的內容

讓我們來了解一下參數:

@property (readonly, copy) NSNotificationName name;
@property (nullable, readonly, retain) id object;
@property (nullable, readonly, copy) NSDictionary *userInfo;

name:消息對象的唯一標識,用于辨別消息對象,可以使用系統原生(比如用來監聽鍵盤彈出),也可以自定義.

object:指定接收消息的對象,為nil時消息傳遞給所有監聽該消息的對象,否則只有指定對象可以接收消息.

userInfo:傳遞給監聽者的消息內容.

再來看接收通知的方法

- (void)addObserver:觀察者(一般為self) 
                    selector:監聽方法 (一般要加:冒號.代表有參數,參數為NSNotification)
                        name:消息名字
                        object:發送消息的對象;

接收到消息之后,在監聽方法里面可獲得傳遞過來的參數.使用notification.userInfo接收(字典)

注意:通知需要在控制器的生命周期方法中移除,否則會造成內存泄漏

[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                                              name:@"消息名字"
                                                                             object:nil];

通知相比block,代理這兩種傳值的方法,它的優勢就是可以跨控制器發送消息/傳值,但是使用的時候一定要注意通知的移除.

預告一下:明天學習block.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • AFHTTPRequestOperationManager 網絡傳輸協議UDP、TCP、Http、Socket、X...
    Carden閱讀 4,384評論 0 12
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,364評論 0 6
  • 一、深復制和淺復制的區別? 1、淺復制:只是復制了指向對象的指針,即兩個指針指向同一塊內存單元!而不復制指向對象的...
    iOS_Alex閱讀 1,424評論 1 27
  • 有關鍵盤的通知: 對應的監聽方法: 鍵盤出現或者消失的時候拖帶效果(放在監聽鍵盤通知UIKeyboardWillC...
    思念那年慕云閱讀 254評論 2 0