OC:功能高內聚

說明
首次發布 2016年12月08日
最近更新 2018年06月25日

示例代碼:

+ (void)load {
    __block id observer =
    [[NSNotificationCenter defaultCenter]
     addObserverForName:UIApplicationDidFinishLaunchingNotification
     object:nil
     queue:nil
     usingBlock:^(NSNotification *note) {
         [self configTools]; // 這里做配置
         [[NSNotificationCenter defaultCenter] removeObserver:observer];
     }];
}

說明:

    1. + load方法在足夠早的時間點(main函數執行之前)被調用;
    1. block 版本的通知注冊會產生一個__NSObserver *對象用來給外部 remove 觀察者;
    1. block 對 observer 對象的捕獲早于函數的返回,所以若不加__block,會捕獲到 nil;
    1. 在 block 執行結束時移除 observer,無需其他清理工作。

這樣,在模塊內部就完成了在程序啟動點代碼的掛載。


拓展

通知是在 - application:didFinishLaunchingWithOptions: 調用完成后才發送的。AppDelegate 作為程序級狀態變化的 delegate,應該只做 路由分發 的作用和實現 <UIApplicationDelegate> 的方法,具體邏輯實現代碼還是應該在各自的模塊中。

后記: 該文章參考 孫老師 的博客,在此表示衷心的感謝。

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

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,521評論 25 708
  • 假設我們需要建造一棟建筑,那么第一步需要做什么工作?——沒錯,設計和規劃好地基,萬丈高樓平地起依靠的是穩健合理的地...
    汪繼志閱讀 857評論 0 10
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,813評論 1 92
  • 當確定了APP的設計需求和產品的整體結構之后,要著手開始規劃和制作APP的原型及UI界面。一款APP的好與不好,很...
    設計思考閱讀 46,814評論 7 117
  • 我開始進一步的回憶我的童年,但是我拼盡全力,大腦能夠及的最遠回憶只能到三歲左右的樣子。所以,我想從我自身尋找答案肯...
    欄骙粽閱讀 650評論 0 3