setValueForKeyPath底层实现

setValue:forKeyPath:的底层实现:

  • 1.它会调用这个属性的set⽅方法.
    2.如果没有set⽅方法,它会去判断有没有跟key值同名的成员属性.如果有,就直接赋 值,icon = obj.
    3.如果没有,那么它还会去判断有没有跟key值名相同带有下划线的成员属性,如果有,就直接赋值,_icon = obj.
    4.如果都没有, 就直接报错.找不到对应的成员属性.
    利用KVC会用调用属性的set方法. 当给icon属性赋值时,把传进来的字符串当作图片的名称,创建⼀个图片,再给图片进⾏赋 值.
    这里的参数,类型是可以改的
- (void)setIcon:(NSString *)icon{
UIImage *image = [UIImage imageNamed:icon];
_icon = image; 
}

那在View当中就可以直接赋值图⽚片了.

 -(void)setFlagItem:(FlagItem *)flagItem{
_flagItem = flagItem; 给属性赋值.
设置名称
self.name.text = flagItem.name; 设置图⽚片.
//self.imageV.image = [UIImage imageNamed:flagItem.icon]; 
模型当中保存的应该是最想的东西,所以在模型当中保存的应该是图片.
    self.imageV.image = flagItem.icon;
}

你可能感兴趣的:(setValueForKeyPath底层实现)