Notification Once
来源:互联网 发布:linux客户端是什么意思 编辑:程序博客网 时间:2024/06/11 09:45
这个优化非常不错,,,收藏了。。。
前段时间整理项目中的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
- Notification Once
- Notification Once
- Notification Once为AppDelegate瘦身
- Notification
- Notification
- Notification
- Notification
- notification
- Notification
- Notification
- Notification
- Notification
- Notification
- Notification
- Notification
- Notification
- notification
- Notification
- 如何检测手机系统,如何检测页面是微信还是QQ打开
- C语言分支结构
- 钉钉开发系列(四)获取JS票据
- 删除用户自定义配置
- 高精度模板3.0
- Notification Once
- iOS 8 Auto Layout界面自动布局系列5-自身内容尺寸约束、修改约束、布局动画
- 字符串转成实数-atof
- ACM--百分比求值--HDOJ 1701--ACMer--水
- 序列和索引
- JD 2016年实习生笔试题
- 训练3 习题11
- CAN总线发送与接收函数
- GC基本概念