zoukankan      html  css  js  c++  java
  • 2. iOS程序的生命周期

    程序启动-生命周期

    来自:  QQ: 853740091

    1.首先讲解UIApplication对象

    (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序。

    (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示。

    (3)通过[UIApplicationsharedApplication]可以获得这个单例对象

    (4) 一个iOS程序启动后创建的第一个对象就是UIApplication对象,且只有一个(通过代码获取两个UIApplication对象,打印地址可以看出地址是相同的)。

    (5)利用UIApplication对象,能进行一些应用级别的操作

     1.1 应用级别的操作示例:

    1)设置应用程序图标右上角的红色提醒数字(如QQ消息的时候)

    2)设置app联网时候的加载小菊花

    3)管理状态栏 就是app最上边的信号等

    4)openURL: 最常用的点击一个按钮跳到app stroe的下载界面、还有发短信、发邮件等

     UIApplication对象会不断的检测应用程序的当前状态。当系统修改了应用程序的当前状态,会发送通知,UIApplication对象就会检测到这个通知。

    2. UIApplication Delegate

     2.1.简单说明

    所有的移动操作系统都有个致命的缺点:app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止。还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件。

    每次新建完项目,都有个带有“AppDelegate”字眼的类,它就是UIApplication的代理 遵守协议<UIApplicationDelegate>

    2.2 代理方法

    // 当应用程序启动完毕的时候就会调用(系统自动调用)
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    NSLog(@"didFinishLaunchingWithOptions");
    return YES;
    }

    // 即将失去活动状态的时候调用(失去焦点, 不可交互)
    - (void)applicationWillResignActive:(UIApplication *)application
    {
    NSLog(@"ResignActive");
    }

    // 重新获取焦点(能够和用户交互)
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
    NSLog(@"BecomeActive");
    }

    // 应用程序进入后台的时候调用
    // 一般在该方法中保存应用程序的数据, 以及状态
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
    NSLog(@"Background");
    }

    // 应用程序即将进入前台的时候调用
    // 一般在该方法中恢复应用程序的数据,以及状态
    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
    NSLog(@"Foreground");
    }

    // 应用程序即将被销毁的时候会调用该方法
    // 注意:如果应用程序处于挂起状态的时候无法调用该方法
    - (void)applicationWillTerminate:(UIApplication *)application
    {
    }

    // 应用程序接收到内存警告的时候就会调用
    // 一般在该方法中释放掉不需要的内存
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
    {
    NSLog(@"MemoryWarning");
    }

    3. 程序启动原理

    int main(int argc, char * argv[]) {

        @autoreleasepool {

            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

        }

    }

    int argc, char * argv[]  这两个参数包含应用程序何时启动等信息(系统传入的参数)

     @autoreleasepool 缓存池,对象引用计数自动处理器 新生成一个Run Loop的时候,系统会自动的创建一个NSAutoreleasePool,该NSAutoreleasePool无法被删除

    第三个参数:主要是检测程序的状态(指的是系统改变了程序的当前状态)的改变。必须传入UIApplication子类,如果传入nil系统会自动创建一个UIApplication对象

    第四个参数:app程序的代理。第三个参数检测到程序状态的改变,就会通知代理。。然后我们在相应的方法中处理事情。

     注意: 程序退出时 main函数才会返回。否则一个处于一个死循环状态

    4.程序启动的完整过程

    1).main函数

    2).UIApplicationMain

    * 创建UIApplication对象

    * 创建UIApplication的delegate对象

    3).delegate对象开始处理(监听)系统事件(没有storyboard)

    * 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法

    * 在application:didFinishLaunchingWithOptions:中创建UIWindow

    * 创建和设置UIWindow的rootViewController

    * 显示窗口

    4).根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

    * 创建UIWindow

    * 创建和设置UIWindow的rootViewController

    * 显示窗口

  • 相关阅读:
    手工卸载和安装NTKO OFFICE文档控件
    【转】HTMLParser使用详解(4) 通过Visitor访问内容
    【转】OA权限管理的实现(下)
    【转】HTMLParser使用详解(2) Node内容
    XNA4.0 学习笔记一
    Silverlight读取与设置Cookies
    Win8 导航及数据状态保持
    XNA 学习做的第一个小游戏 精灵追逐 (一)
    使用Javascript调用Silverlight
    寻路简单思路
  • 原文地址:https://www.cnblogs.com/mcj-coding/p/5100424.html
Copyright © 2011-2022 走看看