• 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文件,如果没有,那么应用程序加载完毕.

  • 相关阅读:
    B/S端界面控件DevExtreme JavaScript—全新的UI模板库 (v22.2)
    界面组件DevExpress WPF Data Grid哪些功能还能增强?一起来看
    UI组件库Kendo UI for Vue入门指南 如何自定义主题
    一篇文章教你如何用界面组件DevExpress WPF创建一个WPF视图模型
    Leetcode 1345. 跳跃游戏 IV(BFS)
    去中心化需要解决的问题
    Markle Tree(默克尔树)
    功能测试
    数据流测试
    比特币总量计算
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6920545.html
Copyright © 2020-2023  润新知