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的项目模板会自动将该参数设置为一个适当的值。
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的项目模板会自动将该参数设置为一个适当的值。
相关文章推荐
- 实习小白::(转) 在cocos2d-x中使用CCArmature实现骨骼动画
- 获取控件(布局或View)宽度或高度的方法
- AutoMapper在ABP框架
- android中获取context的多种方法的区别(this,getbascontext(),getApplicationcontext())
- 获取Android签名证书的公钥和私钥
- objective c实现配置文件+反射
- Xcode7免证书真机测试详细流程
- 实习小白::(转) Cocos2d-x 更改文字换行风格 ( cocos2dx change line )
- 实习小白::(转) Cocos2d-x 3.x 开发(十八)10行代码看自动Batch,10行代码看自动剔除 --------其实就是渲染图片机制
- Company Brief Intro - App Annie
- iOS学习笔记--12 NSLog相关
- 实习小白::(转) Cocos2d-x 3.0 开发(十七)使用Cocos2d-x 3.0rc,一条命令打包Android
- COCOS学习笔记之定时器
- unity编辑器学习
- 实习小白::(转) Cocos2d-x 3.0 开发(十六)cocos2dx-3.0beta版建立新项目并加载CocoStudio导出文件
- Android——ListView的简单优化
- 实习小白::(转) Cocos2d-x 3.0 开发(十五)使用UILayout布局,制作对话界面
- Android butterknife注解框架
- 实习小白::(转) Cocos2d-x 3.0 开发(十四)使用UIScrollView 实现大小不同物品拖动展示
- 实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序