• iOS程序的启动过程


    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函数才返回

    程序启动时执行main函数,在main函数当中有以下操作.
    int main(int argc, char * argv[]) {
      @autoreleasepool {
      第三个参数:UIApplication类名或者子类的名称 nil == @"UIApplication"
      第四个参数:UIApplication的代理的代理名称
      NSStringFromClass:把类名转化字符串
      NSStringFromClass好处:1.有提示功能 2.避免输入错误
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
      }
    }

    程序完整启动流程
    1.执行Main
    2.执行UIApplicationMain函数.
    3.创建UIApplication对象,并设置UIApplicationMain对象的代理.
    UIApplication的第三个参数就是UIApplication的名称,如果指定为nil,它会默认为UIApplication.
    UIApplication的第四个参数为UIApplication的代理.
    4.开启一个主运行循环.保证应用程序不退出.
    5.加载info.plist.加载配置文件.判断一下info.plist文件当中有没有Main storyboard file base name
    里面有没有指定storyboard文件,如果有就去加载info.plist文件,如果没有,那么应用程序加载完毕.

  • 相关阅读:
    Java实现荷兰国旗问题
    Java实现荷兰国旗问题
    QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)
    怀旧老游戏
    我的第一个Chrome插件:天气预报应用
    ddd
    Android 反编译工具
    ASP.NET MVC局部视图
    jQuery类库的设计
    jquery+html三级联动下拉框
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6920545.html
Copyright © 2020-2023  润新知