initWithFrame&initWithCoder的
2017-08-18 本文已影响5人
猪队友小L
万能初始化函数
所有初始化方法都会最终的调用两个方法来初始化
-
initWithFrame:通过代码创建的View最终都会调用这个
-
initWtthCoder:通过文件创建的最终都会调用这个
init调用的哪个
init属于通过代码创建View,会去调用initWithFrame:frame,其中frame为(0,0,0,0)
通过文件创建的是什么
通过文件创建是指xib和storyboard的initWithNibName
调用顺序是initWithNibName先调用awakeFromNib,然后awakeFromNib会去从本地文件进行unarchive(解档),unarchvie会去调用initWtthCoder
通过文件创建的实质
通过文件创建实质是加载了本地文件,进行了一系列的解压缩(unarchive 解档)操作,所以说才触发了解档函数initWtthCoder
堵死一个View的初始化
如果要堵死初始化,只需要在自定义View里重写好initWithFrame&initWithCoder就可以了,不管是如何创建
initWithCoder的常规用途
因为实质是解档功能,所以initWithCoder两个用处:
- 只在xib和storyboard时,会在加载完视图后执行
- 归档解挡时重写 所以一般和encoder只用于重写 不用于调用