VC和view一些方法调用顺序

UIView的layoutSubviews和drawRect方法什么时候调用 http://blog.sina.com.cn/s/blog_afb4d07f0101iamg.htmlhtml

loadView和viewDidLoad

loadView和viewDidLoad是iPhone开发中确定要用到的俩个方法,他们均可以用来在试图载入的时候初始化一些内容,可是他们有什么区别呢?安全

我在Xcode7.3.1上试验,无论是从xib建立views仍是代码建立views,这俩个方法都会走,并且是先走前者,再走后者。ui

建立一个类和实例化一个类.在XCode中建立一个类和实例化一个类很容易区分,可是在IB(Interface Builder)中有时候就会迷糊.其实也很好区分,孤零零地建立了一个nib文件,没有和其余可被实例化的类有直接或间接关系的时候,这个类或这些类(一个nib文件俺也可能包含多个类)是没有机会被实例化的,因此这种状况只是经过ib建立了一个类,而没有实例化.真正的实例化还须要经过在Xcode用代码来读取这个nib文件.知道这两这的区别后这些方法也就容易辨认多了spa

viewDidLoad其实没什么可混淆的,不管经过什么途径加载(Xcode或者IB,这里的加载属于实例化)完view后确定会执行这个方法.code

loadView须要分两种状况.当你经过Xcode实例化一个类的时候就须要本身在controller中实现这个方法.而在IB中实例化就不须要实现它.但若是你实现它,它也会调用,并且是在viewDidLoad以前,固然在它的实现里能够什么都不作。htm

UIView中一些重要方法initWithFrame、initWithCoder、awakeFromNib、drawRect什么时候调用

initWithFrame、initWithCoder、awakeFromNib、drawRect这几个方法在自定义控件的时候,会常常调用,具体什么状况下会调用哪一个方法下面总结blog

-(id)initWithFrame:当控件不是从xib、storyboard中建立时,会调用这个方法开发

-(id)initWithCoder:当控件是从从xib、storyboard中建立时,会调用这个方法get

-(void)awakeFromNib这个方法在-(id)initWithCoder:方法后调用it

能够理解为:通过-(id)initWithCoder:建立出来的控件是死的,而后经过awakeFromNib来唤醒,因此会有一个前后的调用顺序。

这3个方法都须要调用[super ],调用其父视图的对应方法

通常来讲,为了安全起见,初始化控件的代码咱们写在一个方法里面,而后咱们分别在initWithFrame和initWithCoder中都调用一下,这样就保证了不管你是经过什么方式建立的控件,代码都能起做用。

-(void)drawRect:方法不论用代码建立实例仍是xib建立,若是实现了都会调用到的。调用顺序经实验是:

/*
 xib建立实例
 13:23:10.005 UIView9.26[20419:10042299] -[MyView initWithCoder:]
 13:23:10.007 UIView9.26[20419:10042299] -[MyView awakeFromNib]
 13:23:10.007 UIView9.26[20419:10042299] -[ViewController viewDidLoad]
 13:23:10.014 UIView9.26[20419:10042299] -[MyView drawRect:]
 */

/*
 代码建立实例
 13:26:58.854 UIView9.26[20432:10043790] -[ViewController viewDidLoad]
 13:26:58.855 UIView9.26[20432:10043790] -[MyView initWithFrame:]
 13:26:58.861 UIView9.26[20432:10043790] -[MyView drawRect:]
 */
相关文章
相关标签/搜索