說明 | |
---|---|
首次發(fā)布 | 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
函數(shù)執(zhí)行之前)被調用久橙;
- block 版本的通知注冊會產(chǎn)生一個
__NSObserver *
對象用來給外部 remove 觀察者蝉绷;
- block 對
observer
對象的捕獲早于函數(shù)的返回狈醉,所以若不加__block
,會捕獲到 nil不撑;
- 在 block 執(zhí)行結束時移除
observer
唤蔗,無需其他清理工作有送。
這樣,在模塊內(nèi)部就完成了在程序啟動點代碼的掛載盛险。
拓展
通知是在 - application:didFinishLaunchingWithOptions:
調用完成后才發(fā)送的瞄摊。AppDelegate
作為程序級狀態(tài)變化的 delegate
,應該只做 路由 苦掘、 分發(fā) 的作用和實現(xiàn) <UIApplicationDelegate>
的方法换帜,具體邏輯實現(xiàn)代碼還是應該在各自的模塊中。
后記: 該文章參考 孫老師 的博客鹤啡,在此表示衷心的感謝惯驼。