iOS 对象的属性 用self调用 和用下划线调用的区别

在开发中,经常会给视图对象一个模型数据属性model,在拿到模型数据后,就会对相应的控件赋值。

#pragma mark - 数据赋值    
- (void)setModel:(BannerOneViewModel *)model {
     self.model = model;  //错误的  |  ( _model = model ✅)
    dispatch_async(dispatch_get_main_queue(), ^{
        if (model.number.length > 0) {
            licenceNumberL.text = model.number;
        }
        if (model.obd.length > 0) {
            equipmentL.text = model.obd;
        }
        if (model.fours.length > 0) {
            foursShopL.text = model.fours;
        }
    });
}

结果一不小心在set方法中用了 self.model = model来保存model 这个属性,跑起来直接就崩了,一看 死循环

好吧,不能用 self.model = model,那怎么保存model,在其他地方可以呢。对 下划线 _ 懒加载大家都用过,所以应该明白了。

self方法实际上是间接用了get和set方法,下划线方法是直接对变量操作。编译器默认会帮助我们生成属性的getter和setter方法。和继承一样,编译器首先查找当前的类中用户是否定义了属性的getter,setter方法,如果有,则编译器会跳过,使用用户定义的方法。也就是说在使用self.属性时会调用一个getter方法。使引用计数加一,而_属性不会

你可能感兴趣的:(iOS 对象的属性 用self调用 和用下划线调用的区别)