一.在一些老的项目中,有很多不是通过代码添加窗口和跟控制器。是通过设置MainInterface(设置最主要的xib),在xib中通过图形化的操作设置应用程序的代理->设置窗口->设置根控制器->设置跟控制器的view.

这种方式的启动过程:执行Main函数就会加载MainXib文件,并把UIApplication对象当做owner传入。

二.设置了Mainstoryboard(这种方式目前项目中很少用到,很多公司禁止使用storyboard)

1.先执行main函数,main内部会调用UIApplicationMain函数

注释: 进入main函数,在main.m的main函数中执行了UIApplicationMain这个方法,这是ios程序的入口点!

int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName)的参数分别是:

argc、argv:ISO C标准main函数的参数,直接传递给UIApplicationMain进行相关处理即可
principalClassName:指定应用程序类,该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
delegateClassName:指定应用程序类的代理类,该类必须遵守UIApplicationDelegate协议 (例如上面代码中的ZHCAppDelegate)
此函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
UIApplication 对象会依次给delegate对象发送不同的消息,接着会建立应用程序的main runloop(事件循环),进行事件的处理.
程序正常退出时这个函数才返回。如果进程要被系统强制杀死,一般这个函数还没来得及返回进程就终止了

2.在UIApplicationMain函数内部会:
1> 创建UIApplication对象,并设置它的代理对象-ZHCAppDelegate.

2> 开启一个消息循环
* 每监听到对应的系统事件时,就会通知ZHCAppDelegate

3> 为应用程序创建一个UIWindow对象(继承自UIView),设置为ZHCAppDelegate的window属性

4> 加载Info.plist文件,读取最主要storyboard文件的名称

5> 加载最主要的storyboard文件,创建白色箭头所指的控制器对象,并且设置创建的控制器为UIWindow的rootViewController属性(根控制器)

注:这个时候并没有创建控制器的view,控制器的view需要时才会创建。

6> 展示UIWindow,展示之前会将添加rootViewController的view到UIWindow上面(懒加载)

三.没有设置Mainstoryboard

1.先执行main函数,main内部会调用UIApplicationMain函数

2.在UIApplicationMain函数内部会:
1> 创建UIApplication对象,并设置它的代理对象-ZHCAppDelegate.

2> 开启一个消息循环
* 每监听到对应的系统事件时,就会通知ZHCAppDelegate

3> 程序启动完毕后会调用代理的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

在这个方法中通过代码

1)创建窗口(UIWindow对象(继承自UIView),设置为ZHCAppDelegate的window属性),并设置为主窗口

2)  设置窗口的根控制器

注:

1.主窗口
1> 一个iOS app只能有一个主窗口(keyWindow),只有keyWindow才能接受文本框的输入事件

2> 如何访问主窗口
* [UIApplication sharedApplication].keyWindow

3.app中所有的窗口
* [UIApplication sharedApplication].windows

2.屏幕的旋转事件
1> 当屏幕旋转,UIApplication对象接受到旋转事件,接着会通知delagate
2> 最终,旋转事件传递到windnow身上,windnow会通知rootViewControler,rootViewControler自己会决定要不要做相应的旋转操作

这样直接把控制器的view添加到window上,rootViewControler是接受不到旋转事件的。

以上就是本篇博客全部内容,欢迎指正和交流。转载注明出处~

最新文章

  1. JS 4 新特性:混合属性(mixins)之二
  2. codeforces B. Pasha and String(贪心)
  3. 创建 sequence
  4. [BZOJ2656][codevs1207][Zjoi2012]数列(sequence)
  5. Jquery.Datatables 服务器处理(Server-side processing)
  6. ALV常用参数详细描述
  7. 【Shell脚本学习5】第一个Shell脚本
  8. VC++6.0 MFC播放视频
  9. STL set multiset map multimap unordered_set unordered_map example
  10. java 流程执行 循环 foreach循环
  11. CentOS 6.4编译安装淘宝web服务器Tengine
  12. sqlite3结合ios开发
  13. PHP 分析1
  14. Ubuntu 12.04 中自定义DNS服务器设置
  15. mongodb 高级操作
  16. Java-HttpServletRequest
  17. .NET Standard 2.0正式发布了
  18. istio sidecar自动注入过程分析
  19. JS 删除数组中某个元素
  20. 笔记react router 4(四)

热门文章

  1. 1.2 js基础
  2. POJ 3468——A Simple Problem with Integers——————【线段树区间更新, 区间查询】
  3. 【Linux】网络性能测试工具iperf详细使用图文教程【转】
  4. 04.Continue,和三元表达式的学习
  5. c#winform循环播放多个视频
  6. 多结果集IMultipleResult接口
  7. SharePoint Tricks
  8. 【IOS】IOS综合
  9. Android UI 切图命名规范、标注规范及单位描述(转载)
  10. 基本类型int强转short时发生了什么?