一、程序启动原理

1.1、main函数中执行了一个UIApplicationMain这个函数UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

1.2、argc、argv:直接传递给UIApplicationMain进行相关处理即可

principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值

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

1.3、UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性

1.4、接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对application:didFinishLaunchingWithOptions:方法)

1.5、程序正常退出时UIApplicationMain函数才返回

#import <UIKit/UIKit.h>
#import"AppDelegate.h"int main(int argc, char * argv[])
{
@autoreleasepool {
// return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
// return UIApplicationMain(argc, argv, @"UIApplication", NSStringFromClass([AppDelegate class]));/*
argc: 系统或者用户传入的参数个数
argv: 系统或者用户传入的实际参数
1.根据传入的第三个参数创建UIApplication对象
2.根据传入的第四个产生创建UIApplication对象的代理
3.设置刚刚创建出来的代理对象为UIApplication的代理
4.开启一个事件循环
*/return UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
}
} 
 
二、程序启动的完整过程

从main文件开始说起程序启动分为两类:1.有storyboard 2.没有storyboard

(一)有storyboard情况下:
1.main函数

2.UIApplicationMain

    - 创建UIApplication对象
    - 创建UIApplication的delegate对象

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

    - 创建UIWindow
    - 创建和设置UIWindow的rootViewController
    - 显示窗口

(二)没有storyboard情况下:
1.main函数

2.UIApplicationMain

    - 创建UIApplication对象
    - 创建UIApplication的delegate对象

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

    - 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
    - 在application:didFinishLaunchingWithOptions:中创建UIWindow
    - 创建和设置UIWindow的rootViewController
    - 显示窗口
 
 

最新文章

  1. 18. class
  2. hdu 5289 rmp+二分+枚举后界 or单调队列 ****
  3. delete 类对象指针的注意事项]
  4. 安装CentOS Core之后布置环境脚本
  5. Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
  6. shell:crontab
  7. iOS下OpenCV开发用OC还是Swift
  8. [RESTful] RESTful是什么,为什么要使用它
  9. Spring Boot 特性以及代码模板实例
  10. WireShark Wifi认证数据包分析(论文idea)
  11. (转)JavaWeb学习之Servlet(一)----MyEclipse及Tomcat的配置
  12. react购物车
  13. Python 一篇学会多线程
  14. Storm介绍及核心组件和编程模型
  15. Win10尝鲜体验——初识传说中不一样的Windows 分类: 资源分享 2015-07-24 18:27 13人阅读 评论(0) 收藏
  16. 第一篇 Python图片处理模块PIL(pillow)
  17. angular组件层次与军事指挥层级职责的联系
  18. django中models阅读笔记
  19. 解决Mybatis配置ORM映射 时分秒都为0
  20. 三重Des对称加密在Android、Ios 和Java 平台的实现

热门文章

  1. numpy array转置与两个array合并
  2. php攻击漏洞总结
  3. Redis学习路线
  4. 完全分布式安装hadoop集群
  5. App自动化测试探索(一)借助Appium实现APP的自动化测试
  6. Linux centos 6.5 搭建 svn服务器
  7. ios 加密解密(包括base64,DES)非原创
  8. 浅学soap--------2
  9. 【剑指offer】删除链表中重复的节点,C++实现(链表)
  10. 欧拉函数 and 大数欧拉 (初步)