type
Post
status
Published
date
Aug 12, 2014
slug
summary
tags
iOS
category
技术分享
icon
password
init-初始化程序;
viewDidLoad-加载视图;
viewWillAppear-UIViewController对象的视图即将加入窗口时调用;
viewDidApper-UIViewController对象的视图已经加入到窗口时调用;
viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;
viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;
viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;
viewDidUnload-当内存过低,释放一些不需要的视图时调用。
上面的内容是生命周期。今天遇到的问题如下:
RootViewController.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization _navigationView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, _viewWidth, _navgationBarHeight+_statusBarHeight)]; _navigationView.backgroundColor = [UIColor colorWithRed:190.0/255.0 green:0/255.0 blue:0/255.0 alpha:1]; DLog(@"RootViewController init 1"); [self.view addSubview:_navigationView]; DLog(@"RootViewController init 2"); } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. DLog(@"RootViewController viewDidLoad"); }
MyViweController.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization DLog(@"MyViweController init"); } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. DLog(@"MyViweController viewDidLoad"); }
MyViweController 是 继承自 RootViewController 的。
log打印的顺序如下
RootViewController init 1 RootViewController viewDidLoad MyViweController viewDidLoad RootViewController init 2 MyViweController init
要知道:视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。
但是我上面的代码中,在 init 里面使用self.view时,就开始加载视图了。这就导致延迟载入机制失效了。
所以,我们在使用中,尽量不要在init相关的方法中调用viewController的相关视图。
参考: