AppDelegate瘦身
2016-06-27 09:48
260 查看
AppDelegate 作为程序级状态变化的 delegate,应该只做路由和分发的作用,具体逻辑实现代码还是应该在分别的模块中,这个文件应该保持整洁,除了
如果想尽早做好某些模块的初始化工作,其实这些代码完全可以利用
解释:
block 版本的通知注册会产生一个
block 对 observer 对象的捕获早于函数的返回,所以若不加
nil
在 block 执行结束时移除 observer,无需其他清理工作
这样,在模块内部就完成了在程序启动点代码的挂载
<UIApplicationDelegate>的方法外不应该出现其他方法。
如果想尽早做好某些模块的初始化工作,其实这些代码完全可以利用
Notification的方式在自己的模块内部搞定,分享一个巧妙的方法:
+ (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,无需其他清理工作
这样,在模块内部就完成了在程序启动点代码的挂载
相关文章推荐
- 开发者所需要知道的 iOS 10 SDK 新特性
- 应用异常诊断
- Appium+Robotframework实现iOS应用的自动化测试-6:手势密码的解决方案
- android系统常用adb命令整理
- Appium+Robotframework实现iOS应用的自动化测试-5:一个简单的例子
- 用 appledoc 生成文档
- Appium+Robotframework实现iOS应用的自动化测试-4:OS X中安装和启动RIDE
- iOS MD5加密字符串
- unity开发经验之用材质贴图模拟流体特效
- Listview里包含组件(checkbox)点击事件和Item的点击事件冲突
- Android——接入Bugly跟踪平台
- ios系统下,html5拍照上传的压缩处理
- 闪送v4.1.7官方安卓版
- android studio签名忘记里怎么办?
- 配置 applicationContext.xml 是出现 Referenced file contains errors
- IOS 蓝牙介绍
- 对iOS10新增Api的详细探究
- SimpleDateFormat用法
- cocos2d-x 常见问题
- VM错误解决:This Virtual Machine Appears To Be In Use