iOS四大对象之AppDelegate及UIApplicatio

作者: 非典型技术宅 | 来源:发表于2016-11-25 14:53 被阅读987次

    1. AppDelegate应用程序代理

    • 手机上的App有一个致命的缺点:很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止。
    • 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件。作用:当被打断的时候,通知代理进入到后台。
      默认创建出来,有七个方法,解读如下:
    
    // 程序第一次加载完毕,就会调用此方法
    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
    
    // 程序将要失去焦点 - 不能交互
    - (void)applicationWillResignActive:(UIApplication*)application
    
    // 程序已经进入后台,通常我们会在这个时候保存数据
    - (void)applicationDidEnterBackground:(UIApplication*)application
    
    // 程序将要进入前台,通常我们会在这个时候恢复数据
    - (void)applicationWillEnterForeground:(UIApplication*)application
    
    // 程序已经获取焦点 - 可以交互
    - (void)applicationDidBecomeActive:(UIApplication*)application
    
    // 程序挂了,将要完全退出。注意:1.用户主动关闭 2.系统因为内存不够关闭了程序。
    //这个里面最好不要做任何东西,因为很多时候都会是异常退出。不执行这个。
    - (void)applicationWillTerminate:(UIApplication*)application
    
    // 程序接收到内存警告
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
    
    

    2. UIApplicationMain函数/程序启动过程

    • main函数中执行了一个UIApplicationMain这个函数
    intUIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
    

    2.1 启动参数解释

    • argc 系统传入参数的个数
    • agrv 系统传入参数的值列表
    • principalClassName表示要创建的应用程序对象(app的象征,该类必须是UIApplication或者它的字类)。如果传nil默认就表示UIApplication类。
    • delegateClassName表示 给应用程序指定一个代理对象,该类必须遵守UIApplicationDelegate协议

    2.2 启动过程

    Paste_Image.png
    • UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性

    • 接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)

    • 程序正常退出时UIApplicationMain函数才返回

    Paste_Image.png

    1.3 完整启动过程

    1. main函数

    2. UIApplicationMain

    • 创建UIApplication对象
    • 创建UIApplication的delegate对象
    1. delegate对象开始处理(监听)系统事件(没有storyboard)

      • 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
      • 在application:didFinishLaunchingWithOptions:中创建UIWindow
      • 创建和设置UIWindow的rootViewController
      • 显示窗口
    2. 根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

    • 创建UIWindow
    • 创建和设置UIWindow的rootViewController
    • 显示窗口

    相关文章

      网友评论

        本文标题:iOS四大对象之AppDelegate及UIApplicatio

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