Xcode4.2以后iOS应用的启动顺序变化
2013-05-22 21:47
288 查看
以上是Xcode4.2中不采用storyboard应用的默认启动流程图。对于采用了storyboard的应用,UIApplicationMain()将会额外加载应用的主要storyboard文件,从而创建窗口和初始视图。
main()的变化
main()仍然是应用的起点,其代码如下:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc,
argv, nil,NSStringFromClass([AppDelegate class]));
}
}
main()采用了新的@autoreleasepool{}函数,以便支持LLVM3.0。但这一变化不会影响应用 的启动顺序。需要注意的是UIApplicationMain第四个参数的变化,之前是nil,而这里已经更改了。如果查看相关文档(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/doc/uid/TP40006894-CH3-SW7),就会知道第四个参数代表“应用的delegate初始化的类名”,如果从应用的主nib文件加载代理对象,则将该参数指定为nil。
显然,我们的应用代理将不会由之前的MainWindow.xib加载,而是直接由UIApplicationMain()函数创建。实际上,项目中已经不再有MainWindow.xib文件。
在Xcode4.2及以后版本去掉main
nib文件的原因很可能是storyboarding的导入。storyboards基于视图控制器,而非视图或窗口。
最后,对于non-storyboarding的应用,由于取消了MainWindow.xib,因此在AppDelegate.m中的didFinishLauchingWithOptions:方法中就需要增加一些初始化的代码,如下:
- (BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
self.window =
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//
Override point for customization after application launch.
if([[UIDevice currentDevice] userInterfaceIdiom]
== UIUserInterfaceIdiomPhone)
{
self.viewController =
[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
self.viewController =
[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
相关文章推荐
- ios应用启动后的自动版本检测方式
- IOS应用的启动流程
- ios 启动顺序
- iOS 友盟推送,应用内推送启动图推送闪动黑屏,插屏推送方法报错
- iOS应用启动时间
- iOS应用启动时不占满全屏,上下有黑边
- 从 C 语言的 main 入手看 iOS 应用启动过程及进化
- iOS开发之应用首次启动显示用户引导
- 从iOS应用中,启动一个Unity App
- iOS开发 应用iOS特性实现在应用内打电话,发短信,打开网页等。实现应用间授权以后再整理
- iOS应用启动时不占满全屏,上下有黑边!
- iOS开发笔记--应用首次启动显示用户引导
- ios 启动分享到其它应用
- 【iOS学习笔记】iOS启动顺序
- iOS开发笔记--应用首次启动显示用户引导
- ios应用内切换设置语言,不跟系统变化
- Cisco的IOS启动顺序配置
- iOS应用启动时不占满全屏上下有黑边问题的解决方案
- IOS学习之——借用别人的应用图片 启动图片
- 游戏、应用启动另一游戏或者应用处理(Android/Ios)