整天都在初始化,好几种初始化方法,今天有时间了,就来总结一下iOS中的几种常见初始化方法。
1,下边这一种是最简单的初始化,不过一定要记着,在初始化的时候一定要先调用父类的初始化。
- (instancetype)init {
if (self = [superinit]) {
}
return self;
}
2.下边这一种也是初始化,但是这个初始化是用于视图加载nib文件,从nib中加载对象实例时,用下边的方法来初始化这些实例对象,可以是XIB中嵌套XIB,也可以是一个View或者Controller直接来拿XIB,都会调用这个方法。
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [superinitWithCoder:aDecoder];
return self;
}
3.这种就是和上边一种相反,就是在我们写的程序中没有nib文件的时候,就是用纯代码控制的视图内容,掉用下边的方法来实例化对象。
- (instancetype)initWithFrame:(CGRect)frame {
self = [superinitWithFrame:frame];
return self;
}
4.当对象是UIViewController的子类,那么就必须调用下边的方法调用那个NIB文件初始化自身,即使没有使用NIB文件也会调用这个方法,如果调用这个方法,并传递的两个参数为空(nil),然后类会调用-loadView去读区一个名字和对象相同的NIB文件,来初始化自身,如果没有这样的nib文件,就必须调用-setView:来设置一个self.view,或者重载loadView方法
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil]) {
//DO SOME INIT
}
return self;
}
5.自己定义初始化方法了,那样就根据自己的需要来写这个初始化的方法
- (instancetype)initWithWidth:(CGFloat)width height:(CGFloat)height ....
6.- (void)awakeFromNib方法
这个方法也是XIB中惯用的方法,不过这个不是初始化的,这个是,怎么说呢,这是当我们的XIB中约束没拉好,或者XIB中需要增加或者删除控件时,我们可以在这个方法中写约束,写增加或者减少的控件,改变Frame等。