VC和view一些方法调用顺序
2016-09-27 00:00
197 查看
UIView的layoutSubviews和drawRect方法何时调用 http://blog.sina.com.cn/s/blog_afb4d07f0101iamg.html
我在Xcode7.3.1上试验,不管是从xib创建views还是代码创建views,这俩个方法都会走,而且是先走前者,再走后者。
创建一个类和实例化一个类.在XCode中创建一个类和实例化一个类很容易区分,但是在IB(Interface Builder)中有时候就会迷糊.其实也很好区分,孤零零地创建了一个nib文件,没有和其他可被实例化的类有直接或间接关系的时候,这个类或这些类(一个nib文件俺也可能包含多个类)是没有机会被实例化的,所以这种情况只是通过ib创建了一个类,而没有实例化.真正的实例化还需要通过在Xcode用代码来读取这个nib文件.知道这两这的区别后这些方法也就容易辨认多了
viewDidLoad其实没什么可混淆的,无论通过什么途径加载(Xcode或者IB,这里的加载属于实例化)完view后肯定会执行这个方法.
loadView需要分两种情况.当你通过Xcode实例化一个类的时候就需要自己在controller中实现这个方法.而在IB中实例化就不需要实现它.但如果你实现它,它也会调用,而且是在viewDidLoad之前,当然在它的实现里可以什么都不做。
-(id)initWithFrame:当控件不是从xib、storyboard中创建时,会调用这个方法
-(id)initWithCoder:当控件是从从xib、storyboard中创建时,会调用这个方法
-(void)awakeFromNib这个方法在-(id)initWithCoder:方法后调用
可以理解为:经过-(id)initWithCoder:创建出来的控件是死的,然后通过awakeFromNib来唤醒,所以会有一个先后的调用顺序。
这3个方法都需要调用[super ],调用其父视图的对应方法
一般来说,为了安全起见,初始化控件的代码我们写在一个方法里面,然后我们分别在initWithFrame和initWithCoder中都调用一下,这样就保证了无论你是通过什么方式创建的控件,代码都能起作用。
-(void)drawRect:方法不论用代码创建实例还是xib创建,如果实现了都会调用到的。调用顺序经实验是:
loadView和viewDidLoad
loadView和viewDidLoad是iPhone开发中肯定要用到的俩个方法,他们都可以用来在试图载入的时候初始化一些内容,但是他们有什么区别呢?我在Xcode7.3.1上试验,不管是从xib创建views还是代码创建views,这俩个方法都会走,而且是先走前者,再走后者。
创建一个类和实例化一个类.在XCode中创建一个类和实例化一个类很容易区分,但是在IB(Interface Builder)中有时候就会迷糊.其实也很好区分,孤零零地创建了一个nib文件,没有和其他可被实例化的类有直接或间接关系的时候,这个类或这些类(一个nib文件俺也可能包含多个类)是没有机会被实例化的,所以这种情况只是通过ib创建了一个类,而没有实例化.真正的实例化还需要通过在Xcode用代码来读取这个nib文件.知道这两这的区别后这些方法也就容易辨认多了
viewDidLoad其实没什么可混淆的,无论通过什么途径加载(Xcode或者IB,这里的加载属于实例化)完view后肯定会执行这个方法.
loadView需要分两种情况.当你通过Xcode实例化一个类的时候就需要自己在controller中实现这个方法.而在IB中实例化就不需要实现它.但如果你实现它,它也会调用,而且是在viewDidLoad之前,当然在它的实现里可以什么都不做。
UIView中一些重要方法initWithFrame、initWithCoder、awakeFromNib、drawRect何时调用
initWithFrame、initWithCoder、awakeFromNib、drawRect这几个方法在自定义控件的时候,会经常调用,具体什么情况下会调用哪个方法下面总结-(id)initWithFrame:当控件不是从xib、storyboard中创建时,会调用这个方法
-(id)initWithCoder:当控件是从从xib、storyboard中创建时,会调用这个方法
-(void)awakeFromNib这个方法在-(id)initWithCoder:方法后调用
可以理解为:经过-(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:] */
相关文章推荐
- 关于self.window.rootViewController的方法调用顺序
- view的执行过程,各种方法的调用先后顺序
- view方法调用顺序
- android学习12——重载SurfaceView一些方法的执行顺序
- LayoutInflater.inflate()调用后View的构造方法和onFinishInflate()方法执行的顺序
- ParentViewController上子ViewController转换时的方法调用顺序
- 把一些view(子view)加到另一个view(父view)中后,将父view release,那么其中的子view会自动调用release方法嘛?
- 自定义View 中一些方法的调用时机
- view的执行过程,各种方法的调用先后顺序
- Crystal Report(RDC8) 水晶报表在VC6环境中的调用方法
- VC中的一些常用方法(20条)
- 在VC中应用MSXML DOM 的一些基本实现方法
- vc调用vb DLL方法
- 来总结一下在VC中调用COM组件的方法(大家来补充)(转载)
- VC中调用COM组件的方法
- VC中DLL的创建及调用方法
- VC++调用Web Service的方法及注意事项
- VC中DLL的创建及调用方法
- VC常用一些方法(转)
- VC中的一些常用方法(20条)