美文网首页iOS基础知识
init方法与xib区别

init方法与xib区别

作者: letaibai | 来源:发表于2016-04-16 16:34 被阅读436次

控件的创建

  • 在编写第三方框架时,外界使用时创建一个控件有两种方法:

  • 1.init方法

  • 2.xib自定义
    不管是以哪种方法创建,系统底层会调用一些方法来初始化控件,那么该在哪种方法创建时调用对应的初始化方法来设置控件的属性呢?以UILabel举例.

  • init方法:

// 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;
}
  • xib自定义控件
    在通过xib自定义控件时,一般会提供类工厂方法
// .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
}

相关文章

  • init方法与xib区别

    控件的创建 在编写第三方框架时,外界使用时创建一个控件有两种方法: 1.init方法 2.xib自定义不管是以哪种...

  • 自定义view

    创建view的几种方法: - alloc init - 通过xib ##### alloc init * 当通过a...

  • 04-UI基础第4天

    一、xib文件的加载过程 默认调用init方法后,自动调用initWithFrame方法 xib的加载不会调用in...

  • Python的new与init

    Python的new与init 区别 new方法是在init方法前被调用的。new负责创建,init负责创建后的赋...

  • Python的new与init

    Python的new与init 区别 new方法是在init方法前被调用的。new负责创建,init负责创建后的赋...

  • xib创建的view(有修改不了frame的时候)

    可能有些人看了,会说 既然写xib创建了为什么又重写init方法,在init方法中加载xib,真是多此一举,神经病...

  • iOS ViewController生命周期

    Xib类型VC Log日志: 分析:init: 对象初始化方法initWithNibName:bundle:: 先...

  • python------new方法及其他

    一、单例模式new与init的区别:__new:创建实例对象时调用的构造方法init:初始化方法,用于设置实例的相...

  • 单例

    一、单例模式new与init的区别:__new:创建实例对象时调用的构造方法init:初始化方法,用于设置实例的相...

  • ViewController的生命周期

    设置rootVC 在AppDelegate中 init 如果通过xib或storyboard创建,会首先调用该方法...

网友评论

    本文标题:init方法与xib区别

    本文链接:https://www.haomeiwen.com/subject/pvfolttx.html