美文网首页
init注意

init注意

作者: SayFarewell123 | 来源:发表于2017-07-23 17:53 被阅读0次

当用纯代码调用init方法创建对象时,会调用initWithFrame方法,再调用init方法。

为什么要在initWithFrame:方法而不是在init方法?
因为使用纯代码的方式创建自定义类,在以后使用的时候可能使用init方法创建,也有可能使用initWithFrame:方法创建,但是无论哪种方式,最后都会调用到initWithFrame:方法。在这个方法中创建子控件,可以保证无论哪种方式都可以成功创建。
这里有一点需要特别注意:
千万不能像下面这样自定义类,否则,如果你使用init方法初始化,那么,因为setUI方法会被调用两次,所以会加入两次UI控件。

- (instancetype)init
{
    self = [super init];
    if (self) {
        [self setUI]; //
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setUI];//
    }
    return self;
}

- (void)setUI
{
    UILabel* titleLabel = ({
        UILabel* label = [[UILabel alloc]init];
        label.text = @"风速";
        label.textColor = [UIColor whiteColor];
        label.font = [UIFont systemFontOfSize:16];
        [self addSubview:label];
        [label mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.mas_equalTo(10);
            make.top.mas_equalTo(10);
        }];

        label;
    });

    _titleLabel = titleLabel;

    UIView* lineView = ({
        UIView* view = [[UIView alloc]init];
        view.backgroundColor = [UIColor whiteColor];
        [self addSubview:view];
        [view mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.mas_equalTo(1);
            make.left.mas_equalTo(10);
            make.right.equalTo(self.mas_right).offset(-10);
            make.centerY.equalTo(titleLabel.mas_bottom).offset(0);
//            make.bottom.equalTo(titleLabel.mas_bottom).offset(1);
        }];

        view;
    });
}

相关文章

  • init注意

    当用纯代码调用init方法创建对象时,会调用initWithFrame方法,再调用init方法。 为什么要在ini...

  • Git Command

    git init git init 是创建git仓命令,需要注意的是创建的时候需要注意创建位置 git clone...

  • iOS 内存管理(补充)

    NSNumber *__strong num = [[NSNumber alloc] init];注意 __str...

  • Swift中convenience和required关键字用法

    convenience关键字 使用convenience关键字增加init方法 注意事项: 增加init的初始化方...

  • vue响应式原理

    注意右侧的调用队列 进行初始化的时候 this._init() 初始化的时候调用 initState() init...

  • 设置圆角的几种方式

    1. CAShapeLayer+UIBezierPath 注意:UIBezierPath init 方法中的 ro...

  • 关于Objective-C中的init和self的一些问题

    这里先说一下init在oc中的使用即注意的问题 Objective-C的推荐init方法写法如下: 这里涉及了几个...

  • 继承中的特殊方法

    __init__方法 __init__方法在类的一个对象被建立,马上运行。用来对你的对象初始化。 注意,这个名...

  • iOS 去掉导航栏的边界黑线

    iOS 去掉导航栏的边界黑线 方法一: 注意:1)如果img = [UIImage alloc]init] ; 导...

  • GIT的简单使用

    注意: 1 新建的项目需要的操作 ————>init ————>remote 2 添加了文件同步操作 ————> ...

网友评论

      本文标题:init注意

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