iOS程序的启动过程
UIApplicationMain
main函数中执行了一个UIApplicationMain这个函数
// argc、argv:直接传递给UIApplicationMain进行相关处理即可
int UIApplicationMain(int argc, char *argv[],
// principalClassName:指定应用程序类名(app的象征);
该类必须是UIApplication(或子类)。
如果为nil,则用UIApplication类作为默认值.
// delegateClassName:指定应用程序的代理类
该类必须遵守__UIApplicationDelegate__协议
NSString *principalClassName, NSString *delegateClassName);
- UIApplicationMain函数会根据
principalClassName
创建UIApplication对象 - 根据
delegateClassName
创建一个delegate对象 - 并将该delegate对象赋值给UIApplication对象中的
delegate
属性 - 接着会建立应用程序的
Main Runloop(事件循环)
- 然后进行事件的处理 :
(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法
) - 程序正常退出时UIApplicationMain函数才返回
程序启动过程
-------------UIApplication做的事情----------------
1- 创建UIApplication对象;
2 - 创建UIApplication代理,并且设置UIApplication代理;
3 - 开启主运行循环,处理事件
4 - 加载info.plist
5 - 如果info.plist里面有指定main.storyboard,就加载main.storyboard
—————在加载main.storyboard时做的事情——————
1 - 创建UIWindow
2 - 加载main.storyboard,并且加载main.storyboard中指定的控制器
3 - 把新创建的控制器作为窗口的根控制器,让窗口显示出来.