在开发中,经常会给视图对象一个模型数据属性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方法。使引用计数加一,而_属性不会