自己对Appdelegate的一些理解

2017-09-23  本文已影响0人  褪而未变
  • 以前写过一篇关于Appdelegate的文章,当时对其他的很多功能和使用技巧还是不是很清楚,只做了一些简短的介绍,之后自己做了一些测试,也查阅了很多大神的博客和资料,下面就谈一谈我的一些基本理解:

1.AppDelegate基本认识

要说AppDelegate就得从程序启动开始,由以下代码可以看出,AppDelegate就是一个App的代表,所有基于App层级的操作都需要在其内完成

// UIApplicationMain主要负责了:从给定的类名初始化应用程序对象、从给定的应用程序委托类,初始化一个应用程序委托、启动主事件循环,并开始接收事件
// 第三个参数 principalClassName -- UIApplication 或 UIApplication 子类,nil 默认为 UIApplication
// 第四个参数 delegateClassName -- AppDelagate 类名
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

2.AppDelegate的基本应用环境

苹果的官方文档都建议应该由AppDelegate来处理这些工作:

  • 1.app的启动代码;
  • 2.响应app的状态,比如app切换到后台和前台等状态;
  • 3.响应外部传递给app的通知,比如说push,low-memory warnings;
  • 4.决定了app的状态是否应该保存或者恢复;
  • 5.响应不是发送给特定view或者vc,而是发送给app本身的事件;
  • 6.用来保存一些不属于特定vc的数据。

虽然官方家建议将上述操作放在AppDelegate来处理,但是一个业务逻辑稍复杂点的项目,上述6点的所有功能的代码直接一股脑塞到一个文件里,能不臃肿才怪了,所以就有了第三点.

3.针对臃肿的AppDelegate我们需要采取的措施与方法

实现思路是这样的,具体实现给大家提供一个示例:


image.png

image.png

DMUserCenterModule:用户中心模块上面提到的对象。DMApplicationDelegate:上面提到的协议。DMAppDelegateManager:单例类。
DMUserCenterModule维护在各个业务组件里面;DMApplicationDelegate、DMAppDelegateManager 一般维护在与业务不太相关的弱组件库里面。

上一篇下一篇

猜你喜欢

热点阅读