iOS基础知识

init方法与xib区别

2016-04-16  本文已影响436人  letaibai

控件的创建

// init创建
DLLabel *dlLabel = [[DLLabel alloc] init];// DL为类前缀(classprefix)
//initWithFrame:创建
DLLabel *dlLabel = [[DLLabel alloc] initWithFrame:CGRect];
*不管是使用init方法还是initWithFrame:方法创建控件时,系统底层都会调用initWithFrame:方法.所以可以统一在initWithFrame:方法中重写控件的初始化属性.*
- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        
        //initialize code
    }
    return self;
}
// .h文件
+ (instancetype)label;

// .m文件
+ (instancetype)label{
   //加载DLLabel类型的xib文件
    return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
}

创建时如下:

DLLabel *label = [DLLabel label];

在使用类方法创建控件时,系统底层会调用initWithCoder:方法,另外在xib控件创建完成时调用awakeFromNib方法.所以想初始化控件需要写在以下方法中.

// 当控件加载完成之前调用
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
   self = [super initWithCoder:aDecoder];
    
    //initialize code
    return self;
}
// 当控件加载完成之后调用
- (void)awakeFromNib{
    //initialize code
}
为了保证通过两种方式都能调用初始化代码,可将初始化代码单独抽出到方法中,然后在以上方法中分别调用一次即可.

即:

// 在初始化方法中通过[self initialize]来调用
- (void)initialize{
    //initialize code
}
上一篇下一篇

猜你喜欢

热点阅读