zoukankan      html  css  js  c++  java
  • 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文件,如果没有,那么应用程序加载完毕.

  • 相关阅读:
    怎么分辨是eclipse还是 android studio开发的
    一个帖子学会Android开发四大组件
    Android Studio ADB响应失败解决方法
    500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
    理解 with递归调用 Sqlserver 树查询
    SQLServer树查询
    数字证书原理【转】
    linux 基础命令
    项目经验分享[转自min.jiang]
    ios
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6920545.html
Copyright © 2011-2022 走看看