最好不要在UIViewController的loadView方法中改變狀態欄的可視性(比如狀態欄由顯示變為隱藏、或者由隱藏變為顯示),因為這樣的操作會導致重覆調用2次loadView和viewDidLoad方法。 雖然運行效果是對的,但是系統連續調用了2次loadView和viewDidLoad方法
最好不要在UIViewController的loadView方法中改變狀態欄的可視性(比如狀態欄由顯示變為隱藏、或者由隱藏變為顯示),因為這樣的操作會導致重覆調用2次loadView和viewDidLoad方法。
雖然運行效果是對的,但是系統連續調用了2次loadView和viewDidLoad方法,導致創建了2次UIView,造成了不必要的開銷。為什麼會產生這樣的結果呢?原因是->
狀態欄由顯示變為隱藏,意味著屏幕的可用高度變長了,UIViewController的UIView的高度也要重新調整,因此系統會重新調用loadView方法創建UIView,創建完畢後再次調用viewDidLoad方法。
下麵是代碼演示,以及結果。
// // ViewController.m // CX 不要在UIViewController的loadView方法中改變狀態欄的可視性 // // Created by ma c on 16/3/19. // Copyright © 2016年 xubaoaichiyu. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController -(void)loadView{ NSLog(@"loadView"); //隱藏狀態欄 [UIApplication sharedApplication].statusBarHidden = YES; UIView * view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds]; view.backgroundColor = [UIColor orangeColor]; } - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"viewDidLoad"); } @end