iOS App启动流程
来源:互联网 发布:淘宝源氏的人物手办 编辑:程序博客网 时间:2024/04/28 04:09
Xcode4.2 app启动流程图
以上是Xcode4.2时候 那种不采用storyboard应用的默认启动流程图。对于采用了storyboard的应用,UIApplicationMain()将会额外加载应用的主要storyboard文件,从而创建窗口和初始视图。
但是Main函数仍是应用的起点,其代码如下:
int main(int arg,char *argv[]){ @autoreleasepool{ return UIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegate class])); }}
main()采用了新的@autoreleasepool{}函数,以便支持LLVM3.但这一变化不会影响应用的启动顺序。
我们再来看看UIApplicationMain函数
int UIApplicationMain{ int argc, char *argv[], NSString *principalClassName, NSString * delegateClassName}
第一个参数表示参数的个数,
第二个参数表示装载函数的数组,
第三个参数,是UIApplication类名或其子类名,若是nil,则默认使用UIApplication类名。
第四个参数是协议UIApplicationDelegate的实例化对象名,如果是nil,则从main nib文件中加载委托对象。这个对象就是UIApplication对象监听到系统变化的时候通知其执行的相应方法。
在我们生成的HelloWorld应用程序中,第三个和第四个参数都为nil,那就是UIApplication和HelloWorldAppDelegate了
需要注意的是第四个参数的变化,之前是nil,而这里已经更改了。第四个参数代表该应用的Delegate初始化的类名,如果从应用的主nib文件加载代理对象,则将该参数设置为nil。
显然,我们的应用代理将不会由之前的MainWindow.xib加载,而是直接由UIApplicationMain()函数创建。实际上,项目中已经不再有MainWindow.xib文件。
在Xcode4.2以及以后的版本去掉main xib文件的原因很可能是storyboard的导入。storybo基于试图控制器,而非视图或窗口。
HelloWorldAppDelegate实现了UIApplicationDelegate协议,可以重写其所有方法。
我们在打开HelloWorldAppDelegate文件,我们会看到这样的代码:
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{ self.window.rootViewController=self.viewController; [self.window makeKeyAndVisible]; return YES;}
我们知道,每个应用程序有个UIWindow,这window负责管理和协调应用程序的屏幕显示。在这里把HelloWorldViewController实例赋值给window的rootViewController,rootViewController的view将会作为UIWindow的首视图。
好的,我们就可以在HelloWorldViewController的loadView里添加我们需要的控件了。
总结程序的启动过程如下:
1.程序入口main函数创建UIApplication实例和UIApplication代理实例。
2.在UIApplication代理实例中重写启动方法,设置第一ViewController。
3.在第一ViewController中添加控件,实现应用程序界面。
- iOS App启动流程
- iOS App启动流程
- iOS App启动流程
- Android App启动流程
- Android App启动流程
- App启动流程
- APP启动流程
- Android App启动流程
- Ctrip App 启动流程
- IOS APP设计流程
- iOS App 上架流程
- IOS APP提交流程
- IOS APP提交流程
- iOS APP 开发流程
- IOS APP提交流程
- IOS app 上线流程
- IOS APP提交流程
- IOS APP提交流程
- POJ 1635 Subway tree systems(HASH+判断两棵有根树是否同构)
- SQL Server中删除以指定字符开头的存储过程
- [.Net码农]RDL和RDLC使用ReportViewer显示报表时筛选导出项
- java统计字符串中中英文个数
- HDU 5505
- iOS App启动流程
- 分析j9 GC内存
- 使用重置按钮,重置表单信息
- 邮件营销的3大逻辑
- oracle导入提示“IMP-00010:不是有效的导出文件,头部验证失败”的解决方案
- Android 如何加载巨图?
- 单词反转
- JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]
- Week5-3The exponential problem in parsing