zoukankan      html  css  js  c++  java
  • APP完整的启动流程

    • 0.加载+load方法
    • 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文件,如果没有,那么应用程序加载完毕.
    • 6.通知应用程序,调用代理方法
    扩展:
    • +load :
      • runtime负责按继承顺序递归调用,我们不需要调用super
      • 在自己Class的+load方法时可以替换系统framework中的某个类的方法实现,因为在动态链接过程中,所有依赖库的类是先于自己的类加载的
      • 重载+load时不需要手动添加自动释放池,因为在runtime调用+load方法前后加了 objc_autoreleasePoolPush() 和objc_autoreleasePoolPop() 的。
     
    • main 函数:程序启动的入口点,它的主要工作是控制UIKit framework。
     
    • UIApplicationMain 函数:
         return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])) 
         其原型是:
         UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString * __nullable      principalClassName, NSString * __nullable delegateClassName);
      • argh:系统或者用户传入的参数个数
      • argv:系统或者用户传入的实际参数
      • principalClassName:这个参数标识了应用程序的类的名称(该类必须继承自UIApplication类)。这是负责运行应用程序的类。建议为这个参数传nil。
      • delegateClassName:是应用程序类的代理类。应用程序的代理负责管理系统和你的代码之间的高层次的互动。 Xcode的项目模板会自动将该参数设置为一个适当的值。
     
     
     
     
  • 相关阅读:
    内存中的堆和栈
    数据库——关系型数据库
    如何创建一个进程,如何进程调用进程
    浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
    Moon.Orm 5.0(MQL版)使用指南
    初学 快速幂 的理解
    2016 杭电
    2015 偶数求和 AC 杭电
    2014 青年歌手大赛 AC
    C语言初学 数组 打印菱形
  • 原文地址:https://www.cnblogs.com/10-19-92/p/4983874.html
Copyright © 2011-2022 走看看