博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AppDelegate解耦
阅读量:5964 次
发布时间:2019-06-19

本文共 1180 字,大约阅读时间需要 3 分钟。

方案一:

FRDModuleManager 提供了一个统一的接口,让各模块知晓应用的生命周期。在 AppDelegate 中留下钩子,在特定的生命周期调用模块的对应方法。这样将使得 AppDelegate 更简单。对于应用生命周期的使用也更清晰。 evernotecid://6F55E44D-BBC1-43F1-9310-4138A0D19764/appyinxiangcom/11652118/ENResource/p18418

使用:参考文档

优点:

  • 1、简单,只需要几行代码就可以解决。
  • 2、被添加的每个模块都可以“享受”AppDelegate的各个生命周期。

缺点:

  • 1、每个模块都要初始化并分配内存,当FRDModuleManager里注册了大量模块时,会创建大量对象并影响App启动速度。
  • 2、缺少模块初始化优先级,当有三个模块A,B,C时,正好C依赖于B,B依赖于A,如果在配置文件中配置A,B,C的顺序又是打乱时,初始化会出问题。

其实第2个缺点是可以避免的,我们可以调整plist文件中的类的顺序,来实现模块的调用顺序。我们拿FRDModuleManager的demo中的plist文件来验证一下。

顺序一:FRDGroupModule在上面

对应下面的调用日志

顺序二:FRDGroupModule在下面

对应下面的调用日志

方案二:

JSDecoupledAppDelegate是由的作者开发的一款轻量级的AppDelegate解耦工具。它将AppDelegate各个功能点独立出来,并通过代理的方式将控制权下发。实现原理,利用Objective-C的消息转发机制,转发AppDelegate的各个方法来实现AppDelegate的解耦的

使用:参考文档

优点:

  • 1、JSDecoupledAppDelegate本身对于AppDelegate各个功能的拆分对我们理解AppDelegate有一定帮助——AppDelegate确实承载了太多的功能。
  • 2、由于各个子代理对象的执行顺序是确定的,因此基本可以解决FRDModuleManager中相互依赖的问题。

缺点:

JSDecoupledAppDelegate的缺点非常明显:使用它必须废弃原生的AppDelegate,因此我们不能通过((AppDelegate *)[UIApplication sharedApplication].delegate).window来获取window,以及window的rootViewController。

方案三:AppDelegate分类(Category)

优点:

不需要添加任何三方库,我们就可以给AppDelegate添加很多方法,并且能轻松控制方法的执行顺序

缺点:

添加新的属性比较繁琐,只能通过runtime或者等三方库实现

参考:

转载地址:http://rljax.baihongyu.com/

你可能感兴趣的文章
unix 环境高级编程
查看>>
为数据库建立索引
查看>>
composer使用
查看>>
常用的Web.config配置节设置(customErrors、connectionStrings、appSettings)
查看>>
web相关概念
查看>>
响应式图片,在不同尺寸下切换不同张数
查看>>
wince BindingSource
查看>>
Search for a Range
查看>>
JAVA-猜随机数
查看>>
时至今日您仍是我的光芒
查看>>
android:layout_weight的真实含义(转)
查看>>
linux基本命令
查看>>
76. Minimum Window Substring
查看>>
远程服务器无法复制粘贴问题
查看>>
算法设计--从后向前处理
查看>>
Flume的简单使用
查看>>
简单解锁 之 锁 的简单运用,单机锁 和 分布式锁
查看>>
STMF103系列单片机无法调试和下载程序的原因及其解决
查看>>
ios app上架App Store需要多少费用?
查看>>
JavaScript 1 (转)
查看>>