美文网首页
自己对Appdelegate的一些理解

自己对Appdelegate的一些理解

作者: 褪而未变 | 来源:发表于2017-09-23 10:29 被阅读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我们需要采取的措施与方法

    • 1.在AppDelegate的分类中实现相关逻辑(可根据功能或控制器进行分类实现).


      10001-8C24-30A8415130EE.png
    • 2.使用协议,协议里面声明的就是类似UIApplicationDelegate代理方法。业务组件里面添加一个遵循这个协议的对象,实现你想在AppDelegate里面实现的对应方法。
    • 3.使用单例类,添加全局变量NSMutableArray用于存放各业务组件里面的问题2中的对象,在主工程AppDelegate的代理方法里面遍历数组调用各业务组件里面问题1对象的协议方法,当然,这个遍历数组、调用方法的实现应该放在单例类里面实现。

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


    image.png

    image.png

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

    相关文章

      网友评论

          本文标题:自己对Appdelegate的一些理解

          本文链接:https://www.haomeiwen.com/subject/mqfcextx.html