• UIApplication和delegate代理


    所有的移动操作系统都有个致命的缺点:app很容易受到打扰,比如一个来电或者锁屏都会导致app进入后台甚至被终止

    还有很多其他类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这是UIApplication会通知他的delegate对象 让delegate对象来处理这些系统事件

    常用的代理方法

    @implementation AppDelegate
    
    /**
     *  程序启动完毕就会调用
     */
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        return YES;
    }
    
    /**
     *  程序将要失去焦点的时候调用
     */
    - (void)applicationWillResignActive:(UIApplication *)application {
       
    }
    
    /**
     *  程序进入后台的时候就会调用  一般在这里保存应用数据
     */
    - (void)applicationDidEnterBackground:(UIApplication *)application {
    
    }
    
    /**
     *  程序进入前台就会调用
     */
    - (void)applicationWillEnterForeground:(UIApplication *)application {
       
    }
    
    /**
     *  程序接收到内存警告时调用 一般在这里清楚不需要再使用的内存
     */
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
    {
    
    }
    
    /**
     *  被激活 获取到焦点的时候调用
     */
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        
    }
    
    
    @end

    delegate:可以处理的系统事件包括:

    • 应用程序的生命周期事件 比如程序的启动和关闭
    • 系统事件 比如来电
    • 内存警告

    应用程序一启动首先创建的第一个对象就是UIApplication

    UIApplication是应用程序的象征 当我们创建一个项目时:系统已经帮我自动创建了代理 :AppDelegate

    应用程序的启动过程:

    探究UIApplicationMain

    main函数中执⾏行了⼀一个UIApplicationMain这个函数 • int UIApplicationMain(int argc, char *argv[], NSString

    • principalClassName, NSString *delegateClassName); ➢ argc、argv:直接传递给UIApplicationMain进⾏行相关处理即可
    •  principalClassName:指定应⽤用程序类名(app的象征),该类必须是UIApplication(或 ⼦子类)。如果为nil,则⽤用UIApplication类作为默认值
    • delegateClassName:指定应⽤用程序的代理类,该类必须遵守UIApplicationDelegate协 议
    • UIApplicationMain函数会根据principalClassName创建UIApplication对象,根 据delegateClassName创建⼀一个delegate对象,并将该delegate对象赋值给UIApplication对 象中的delegate属性
    • 接着会建⽴立应⽤用程序的Main Runloop(事件循环),进⾏行事件的处理(⾸首先会在程序完毕后调 ⽤用delegate对象的application:didFinishLaunchingWithOptions:⽅方法)
    • 程序正常退出时UIApplicationMain函数才返回

    UIWindow

    • UIWindow是一种特殊的UIView通常在一个app中只会有一个UIWindow
    • ios程序启动完毕后 创建的第一个视图控件就是UIWindow,接着创建控制器View,最后将控制器的view添加到UIWindow上面 于是控制器的view就显示在屏幕上了
    • 一个IOS程序之所以能显示  完全是因为它有UIWindow
    • 也就是说没有UIWindow 就看不见任何UI界面

    程序启动的完整过程


    1.main函数


    2.UIApplicationMain
    * 创建UIApplication对象
    * 创建UIApplication的delegate对象

    3.delegate对象开始处理(监听)系统事件(以前没有storyboard的情况)
    * 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
    * 在application:didFinishLaunchingWithOptions:中创建UIWindow
    * 创建和设置UIWindow的rootViewController
    * 显示窗口

    3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
    * 创建UIWindow
    * 创建和设置UIWindow的rootViewController 为箭头所指向的控制器
    * 显示窗口

  • 相关阅读:
    SQL Server 各版本安装包分享
    你真的了解数据库工程师吗?写给想从事数据库方面工作的朋友
    SQL Server中CASE WHEN的用法
    SQL Server存储过程用法介绍
    python---re模块
    python----openpyxl模块
    selenium(一)---selenium基础
    数据库---MySQL(三)
    数据库---MySql(二)-pymysql
    数据库---MySQL(一)
  • 原文地址:https://www.cnblogs.com/syios/p/4774914.html
Copyright © 2020-2023  润新知