loadView\viewDidLoad\awakeFromNib\initWithCoder

loadView:(该方法被调用时,self.view还为nil)

viewController在self.view == nil以及在property被请求时调用这个方法。

手动创建self.view那么就重载这个方法。

通过interface builder来创建,不要重载这个方法,因为在调用这个方法的时候,xib定制的view还没有定制完。使用xib了,说明应该使用initWithNibName:bundle:方法。

补充:

默认实现:先寻找有关可用的nib文件信息,如果有就根据nib来创建,如果没有就创建一个空白的UIView对象,然后将这个对象设为viewController的主view。(比如,我们在StoryBoard上拖了一个UIViewController,并将其与UIViewController关联,当我们没有重载UIViewController的loadView的时候,运行代码,你就会发现出来的view其实是你在SB上设置的Controller的view)。重载的时候,不应该调用super。接着,如果需要继续初始化我们的view,去viewDidLoad中去做。这其实对应着我们平时的编程步骤,只是我们基本不会重写loadView。


viewDidLoad:(该方法调用时,self.view已经定制完)

手写或者xib创建的view都会调用viewDidLoad。这个方法主要是在self.view加载完了之后对其做进一步的处理。

补充:

viewDidUnload:(在程序内存欠缺时,controller会调用这个方法)

释放view,及相关的对象,应该使用合成器方法:self.customSubview = nil;这种方式来进行释放。


initWithCoder:(当使用了IB创建对象,并实例化的时候会调用)

补充:

使用IB创建对象,其实就是写了xib或者sb文件(XML文件),那么反序列化的工作是由系统完成的。

awakeFromNib:(IB创建的对象被实例化的时候调用)

当initWithCoder:被调用之后,也会调用awakeFromNib。但是awakeFromNib相对于initWithCoder:有个优势:后者在调用时虽然subViews已经被添加到属兔层中去了,但是还没有引用。而在awakeFromNib调用时,各种IBOutlet也都连接好了。



补充:

在IB上创建类和实例化类的区分。IB上实例化需要Xcode通过代码来读取这个nib文件的时候才会实例化。所以,有些时候,我们创建了一个xib文件,里面有些控件,比如UIButton,在没有被显示之前,这个UIButton可能只是一个nil指针。所以,可以在viewWillAppear:里对这些控件属性进行设置。

当使用一个controller控制多个nib文件时,awakeFromNib方法会被多次调用。因此,当不使用awakeFromNib方法来完成nib对象的初始化时,需要注意此方法的多次调用对其他nib文件造成的影响。



你可能感兴趣的:(loadView\viewDidLoad\awakeFromNib\initWithCoder)