征服iOS

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;
}
上一篇下一篇

猜你喜欢

热点阅读