您的位置:首页 > 移动开发

AppDelegate瘦身

2016-06-27 09:48 260 查看
AppDelegate 作为程序级状态变化的 delegate,应该只做路由和分发的作用,具体逻辑实现代码还是应该在分别的模块中,这个文件应该保持整洁,除了
<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,无需其他清理工作
这样,在模块内部就完成了在程序启动点代码的挂载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: