首页 > 其他 > 详细

IOS程序的启动原理

时间:2014-02-16 19:15:03      阅读:326      评论:0      收藏:0      [点我收藏+]

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

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

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

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

bubuko.com,布布扣

注释: 进入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> 为应用程序创建一个UIWindow对象(继承自UIView),设置为ZHCAppDelegate的window属性

4> 程序启动完毕后回调用代理的

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

在这个方法中通过代码

 1)创建窗口,并设置为主窗口

 2)  设置窗口的跟控制器

bubuko.com,布布扣

 

注:

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

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

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

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

bubuko.com,布布扣

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

IOS程序的启动原理

原文:http://www.cnblogs.com/zhcios/p/3551034.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!