initWithFrame和initWithCoder的区别
2015-12-02 本文已影响1308人
superLee
一. initWithFrame:
initWithFrame
方法是用来根据制定的CGRect初始化并返回一个新的视图对象的,其他UI对象,也有initWithFrame
方法,这里我们以UIView为例,讲一下这个方法何时使用。
1.Interface Builder方式自定义view
这种方式就是使用nib文件,就是我们所常用的“拖控件”的方式。如果我们使用了该方法创建了UIView,那么initWithFrame
方法是不会被调用的,因为nib文件已经定义好了view的长、宽、背景以及其他的一些属性。
那么我们要想重写nib中的各项属性,就要在initWithCoder
这个方法里面进行了。
2.纯代码的方式自定义view
用纯代码的方式去自定义一个view,就是我们新建一个继承自UIView的类,当我们加在该view的时候就会调用initWithFrame
来初始化该UIView。尤其需要注意的是,如果是在子类中重写initWithFrame
方法,必须先调用父类的initWithFrame
方法,再对自定义的UIView的子类进行初始化操作。
例如:
- (instancetype)initWithFrame:(CGRect)frame
{
//调用父类的initWithFrame
self = [super initWithFrame:frame];
if (self) {
/*在这里初始化UIView
...
...
*/
}
return self;
}