zoukankan      html  css  js  c++  java
  • iOS程序启动过程

      原文在此

      main函数之前的底层环境搭建(代码拷贝、内存的开辟等操作系统相关的开启一个进程)不再描述,我们从main函数开始。

    1 main函数

    int main(int argc, char * argv[]) {
        NSLog(@"===%s",argv[0]);
        @autoreleasepool {
            /// 函数原型:
            //  int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }

      这里面的代码一般是不变的。首先是一个自动释放池,保证结束时内存释放,下面是参数介绍:

      argc, argv:是标C的参数,argc为argv数组中元素的个数。argv一般有一个元素argv[0]即当前可执行程序的路径。(另外,在linux系统下我们通过终端打开一个程序可以给它传递参数,具体不再展开。如果不知所云括号里面的自动忽略);

      principalClassName指定应用程序类,该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值,它是一个单例,代表一个进程,也是程序创建的第一个对象,利用UIApplication对象,能进行一些应用级别的操作;

      delegateClassName:指定应用程序类的代理类,该类必须遵守UIApplicationDelegate协议。

    2 UIApplicationMain

       1)根据传进的参数创建UIApplication对象;

       2)根据传进的参数创建UIApplication的delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性。

       3)开启一个消息循环

      下面分为storyboard启动和没有storyboard启动

    ##有storyboard##

    3 根据Info.plist加载storyboard

       1)创建UIWindow,UIWindow是一种特殊的UIView,通常在一个App中只会有一个UIWindow(注意是通常,还有其它的,比如弹出的键盘)。设置为主窗口,同一时刻主窗口只有一个,可以通过[UIApplication sharedApplication].keyWindow获取。

       2)创建和设置UIWindow的rootViewController。

       3)显示窗口

     


     

    ##没有storyboard##

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

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

           2)在application:didFinishLaunchingWithOptions:中创建UIWindow:window

           3)创建和设置UIWindow的rootViewController

           4)显示并设置window为主窗口:[window makeKeyAndVisible]; 然后self.window = window;防止被释放。

     

     

  • 相关阅读:
    OnMeasureItem和OnDrawItem的区别和联系
    DockPanel 类
    C# 源码 AForge.NET
    ystem.Windows.Forms.SplitContainer : ContainerControl, ISupportInitialize
    System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....
    System.ComponentModel.Component : MarshalByRefObject, IComponent, IDisposable
    System.Windows.Forms.ListView : Control
    vs2013 密钥_
    系统封装 EasyBoot如何将WIN7安装版提取到光盘
    系统封装 ES3使用方法
  • 原文地址:https://www.cnblogs.com/mddblog/p/4761245.html
Copyright © 2011-2022 走看看