說明 | |
---|---|
首次發布 | 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];
}];
}
說明:
+ load
方法在足夠早的時間點(main
函數執行之前)被調用;
- block 版本的通知注冊會產生一個
__NSObserver *
對象用來給外部 remove 觀察者;
- block 對
observer
對象的捕獲早于函數的返回,所以若不加__block
,會捕獲到 nil;
- 在 block 執行結束時移除
observer
,無需其他清理工作。
這樣,在模塊內部就完成了在程序啟動點代碼的掛載。
拓展
通知是在 - application:didFinishLaunchingWithOptions:
調用完成后才發送的。AppDelegate
作為程序級狀態變化的 delegate
,應該只做 路由 、 分發 的作用和實現 <UIApplicationDelegate>
的方法,具體邏輯實現代碼還是應該在各自的模塊中。
后記: 該文章參考 孫老師 的博客,在此表示衷心的感謝。