一、 APP启动过程
iOS应用的启动可分为pre-main阶段和main()阶段,其中系统做的事情依次是:
//pre-main 启动时间 Total pre-main time: 415.20 milliseconds (100.0%) dylib loading time: 48.42 milliseconds (11.6%) rebase/binding time: 49.79 milliseconds (11.9%) ObjC setup time: 51.63 milliseconds (12.4%) initializer time: 265.25 milliseconds (63.8%) slowest intializers : libSystem.B.dylib : 9.23 milliseconds (2.2%) libBacktraceRecording.dylib : 9.37 milliseconds (2.2%) libMainThreadChecker.dylib : 14.38 milliseconds (3.4%) libglInterpose.dylib : 122.43 milliseconds (29.4%) libMTLInterpose.dylib : 31.22 milliseconds (7.5%) ModelIO : 20.16 milliseconds (4.8%) LEVE : 74.95 milliseconds (18.0%)
CFAbsoluteTime StartTime; int main(int argc, char * argv[]) { StartTime = CFAbsoluteTimeGetCurrent();
extern CFAbsoluteTime StartTime; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //一些配置和加载...... double launchTime = (CFAbsoluteTimeGetCurrent() - StartTime); NSLog(@"didFinishLaunchingWithOptions执行完 ---------> %f",launchTime); return YES; }
-(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; double finishTime = (CFAbsoluteTimeGetCurrent() - StartTime); NSLog(@"ViewdidAppear ---------> %f", finishTime); }
didFinishLaunchingWithOptions执行完 ---------> 1.145531 ViewdidAppear ---------> 3.642620 启动动画结束 ---------> 5.560365
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; [self.window makeKeyAndVisible]; self.window.rootViewController = [[UIViewController alloc] init]; MyTabBarViewController *tabbarVC = [[MyTabBarViewController alloc] init]; ViewController *vc = [[ViewController alloc] init]; vc.title = @"1"; [tabbarVC addChildViewController:vc]; ViewController2 *vc2 = [[ViewController2 alloc] init]; vc2.title = @"2"; [tabbarVC addChildViewController:vc2]; ViewController3 *vc3 = [[ViewController3 alloc] init]; vc3.title = @"3"; [tabbarVC addChildViewController:vc3]; self.window.rootViewController = tabbarVC; NSLog(@"didFinishLaunchingWithOptions ---------> 加载完成"); return YES; }
MyTabBarViewController ---------> 加载完成 ViewController ---------> 加载完成 didFinishLaunchingWithOptions ---------> 加载完成
ViewController2 ---------> 加载完成 ViewController3 ---------> 加载完成
NSLog(@"didFinishLaunchingWithOptions ---------> 加载完成");
这句代码之前加上一句vc2.view.backgroundColor = [UIColor yellowColor];
那么加载顺序就会变成MyTabBarViewController ---------> 加载完成 ViewController ---------> 加载完成 ViewController2 ---------> 加载完成 didFinishLaunchingWithOptions ---------> 加载完成
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; [self.window makeKeyAndVisible]; self.window.rootViewController = [[UIViewController alloc] init]; ViewController *vc = [[ViewController alloc] init]; vc.title = @"1"; MyNavigationController *tabbarVC = [[MyNavigationController alloc] initWithRootViewController:vc]; self.window.rootViewController = tabbarVC; NSLog(@"didFinishLaunchingWithOptions ---------> 加载完成"); return YES; }
MyNavigationController ---------> 加载完成 didFinishLaunchingWithOptions ---------> 加载完成 ViewController ---------> 加载完成
NSLog(@"didFinishLaunchingWithOptions ---------> 加载完成");
这句代码之前加上一句vc.view.backgroundColor = [UIColor yellowColor];
那么加载顺序就会变成MyNavigationController ---------> 加载完成 ViewController ---------> 加载完成 didFinishLaunchingWithOptions ---------> 加载完成
didFinishLaunchingWithOptions执行完 ---------> 0.329191 ViewdidAppear ---------> 0.691656 启动动画结束 ---------> 2.464439