awakeFromNib
当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。也就是说通过nib文件创建view对象是执行awakeFromNib
viewDidLoad
当view对象被加载到内存是就会执行viewDidLoad,所以不管通过nib文件还是代码的方式创建对象都会执行viewDidLoad
/////////////////////////////////////////////////
awakeFromNib是一个只有在GUI对象被成功加载才调用的方法,而init方法是在GUI被创建前就已经调用了。
当程序对Nib文件进行反序列化然后初始化时([[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil]; ),会调用一次awakeFromNib。
但是如果你使用initWithNibName调入Nib时,awakeFromNib是不会被调用的。
所以用以下代码运行程序时不执行awakeFromNib
- TestController *test = [[TestController alloc] initWithNibName:@"Test" bundle:nil];
- [self.view addSubview:test.view]
而viewDidLoad不管在什么情况下都会执行
//
initWithCoder 不需主动调用, 在xib建立ui对象的过程中被调用.
nitWithCoder 在我看来是从文件里加载对象,需要指定文件的编码格式,比如UTF8,unicode等等。
loadView 此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。 如:
-
-
- ( void ) loadView {
-
UIView *view = [ [ UIView alloc ] initWithFrame: [ UIScreen
-
mainScreen ] .applicationFrame ] ;
-
[ view setBackgroundColor:_color ] ;
-
self.view = view;
-
[ view release ] ;
-
}
-
你 在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。 如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。