storyboard启动应用程序的大致流程
[原创] 转载请注明出处:http://i.cnblogs.com/EditPosts.aspx?postid=5395023
用户点击APP图标——程序代码及各种资料会迅速加载进入手机内存——然后会读取和执行info.plist文件,发现设置了启动页为LaunchScreen.storyboard和Main.storyboard——首先将启动页LaunchScreen.storyboard中内容截图显示到手机屏幕上(让启动页拖住用户,为程序真正的执行争取时间),空的项目通常会看到一张空白的大View。
——显示启动页后,iOS系统开始调用main.m中的int main()函数,创建application对象(UIApplication类)和appDelegate对象(AppDelegate类),并将application.delegate = appDelegate; ——之后application对象调用[application.delegate application:didFinishLaunchingWithOptions:]; ——于是程序就来到了AppDelegate类中的application:didFinishLaunchingWithOptions:方法中。—— 执行该方法中Xcode在后台自动添加的启动代码,大致如下(模拟后台操作代码,仅供参考):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; //self.window.backgroundColor = [UIColor whiteColor]; //默认为nil //ViewController *rootVC = [[ViewController alloc]init];//这样写相当于重新创建了一个控制器,那么在storyboard中那个控制器的view上拖控件就无效。 //在Storyboard中通过ID获取到ViewController UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; UIViewController *rootVC = [story instantiateViewControllerWithIdentifier:@"RootVC"]; self.window.rootViewController = rootVC; [self.window makeKeyAndVisible]; //从这句后跳出到ViewController中执行loadView和viewDidLoad看是否有自定义的变化,然后回来执行return YES; return YES; //执行return YES;后再次跳到ViewController中执行viewDidAppear,然后显示屏幕(第二次显示,第一次是显示启动页) }
——Xcode会从Storyboard中实例化并加载viewController及其view视图,执行loadView和viewDidLoad语句看看程序员是否有定制UI界面 ——返回finishLaunch方法执行完return YES; —— 在到ViewController类中执行viewWillAppear和viewDidAppear方法 ——最后显示屏幕。
所以,在第二次显示屏幕前调用的最后一个方法是viewDidAppear。
loadView在App启动时到底都干了些什么?
详见:http://www.cnblogs.com/stevenwuzheng/p/5394978.html
PS: 以上均根据自己理解所写,如存在错误,欢迎大家指正。