这篇文章是专门用来记录开发中一些常见的BUG以及常用的零碎知识点,我会隔一段时间更新内容
1.重复调用2次loadView和viewDidLoad
最好不要在UIViewController的loadView方法中改变状态栏的可视性(比如状态栏由显示变为隐藏、或者由隐藏变为显示),因为会导致重复调用2次loadView和viewDidLoad方法
假设状态栏本来是处于显示状态的:
下面的是错误代码:
- (void)loadView {
NSLog(@"loadView");
// 隐藏状态栏
[UIApplication sharedApplication].statusBarHidden = YES;
// .... 创建UIView
self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds] autorelease];
self.view.backgroundColor = [UIColor grayColor];
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
}
运行效果:
打印信息:
2013-02-26 00:51:36.152 weibo[2251:c07] loadView
2013-02-26 00:51:36.153 weibo[2251:c07] loadView
2013-02-26 00:51:36.153 weibo[2251:c07] viewDidLoad
2013-02-26 00:51:36.154 weibo[2251:c07] viewDidLoad
虽然运行效果是对的,但是系统连续调用了2次loadView和viewDidLoad方法,导致创建了2次UIView,造成了不必要的开销。
原因分析:
状态栏由显示变为隐藏,意味着屏幕的可用高度变长了,UIViewController的UIView的高度也要重新调整,因此系统会重新调用loadView方法创建UIView,创建完毕后再次调用viewDidLoad方法。