您的位置:首页 > 移动开发

APP完整的启动流程

2015-11-21 15:51 155 查看
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的项目模板会自动将该参数设置为一个适当的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: