AppDelegate中的模块初始化转移
来源:互联网 发布:网络主播解约协议 编辑:程序博客网 时间:2024/06/18 14:49
转载自blog.sunnyxx.com
前段时间整理项目中的
其实这些代码完全可以利用
AppDelegate
,发现很多写在- application:didFinishLaunchingWithOptions:
中的代码都只是为了在程序启动时获得一次调用机会,多为某些模块的初始化工作,如:- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // ... [FooModule setup]; [[BarModule sharedInstance] setup]; // ... return YES;}
其实这些代码完全可以利用
Notification
的方式在自己的模块内部搞定,分享一个巧妙的方法:/// FooModule.m+ (void)load{ __block id observer = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:nil usingBlock:^(NSNotification *note) { [self setup]; // Do whatever you want [[NSNotificationCenter defaultCenter] removeObserver:observer]; }];}
解释:
+ load
方法在足够早的时间点被调用- block版本的通知注册会产生一个
__NSObserver *
对象用来给外部remove观察者 - block对observer对象的捕获早于函数的返回,所以若不加
__block
,会捕获到nil - 在block执行结束时移除observer,无需其他清理工作
- 这样,在模块内部就完成了在程序启动点代码的挂载
值得注意的是,通知是在- application:didFinishLaunchingWithOptions:
调用完成后才发送的。
顺便提下给AppDelegate瘦身的建议:AppDelegate作为程序级状态变化的delegate,应该只做路由和分发的作用,具体逻辑实现代码还是应该在分别的模块中,这个文件应该保持整洁,除了<UIApplicationDelegate>
的方法外不应该出现其他方法。
0 0
- AppDelegate中的模块初始化转移
- java中的初始化模块
- AppDelegate初始化快捷引用
- java类中的初始化模块
- OSX程序 AppDelegate初始化显示
- appdelegate中的方法
- AppDelegate中的方法说明
- AppDelegate 中的函数介绍
- AppDelegate中的方法说明
- swift AppDelegate中的方法
- Java中的类装载和初始化模块
- Java中的类装载和初始化模块
- appDelegate.m中的函数说明
- appDelegate.m中的函数说明
- AppDelegate中的方法和作用
- AppDelegate中的常用方法使用说明
- 实战c++中的vector系列--vector<unique_ptr<>>初始化(所有权转移)
- Kafka初始化和故障转移
- WPF中实现验证码功能
- 腾通 VS 百度
- 使用 VisualVM 进行性能分析及调优
- 使用通知机制,在dismissViewControllerAnimated后,completion传值给上一个父视图方法
- XCode实用快捷键
- AppDelegate中的模块初始化转移
- Redis Sentinel集群方案--单机测试
- 用wifi调试android程序
- Android入门实例一 登录界面的设计与实现
- sublime text 2 前端编码神器-快捷键与使用技巧介绍(转)
- Android EditText软键盘显示隐藏以及“监听”
- WebView的使用(基本篇)
- WPF中同一窗口下的界面切换
- Flex AdvancedDataGrid 数据展示异常