天天看點

IOS學習之 Xib KVC KVO1.xib 的基本使用2. KVC 的使用3.KVC 字典轉模型4. KVO (Key Value Observer)

1.xib 的基本使用

  • 建立 xib 檔案
    IOS學習之 Xib KVC KVO1.xib 的基本使用2. KVC 的使用3.KVC 字典轉模型4. KVO (Key Value Observer)
  • 加載 xib
UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"CarView" owner:nil options:nil] firstObject];
    
[self.view addSubview:view];
           
Xib 使用注意事項:
  1. 如果需要在Xib中添加某個View,隻能在initWithCoder 中添加
  2. 如果子控件是從 Xib 中建立,是處于未喚醒狀态,此時如果想要在某個子控件中加入View,必須得在 awakeFromNib 添加
Xib 相當于Android 中的一個View的xml布局,比如android中的recycleView 都會加載一個item_layout. 也可以把Xib 當成是stroyBorad的輕量級可視化View

2. KVC 的使用

KVC 相當于 java中的反射,可以修改類的私有成員屬性

Person.m

#import "Person.h"

@implementation Person
{
    int _age;
}


- (void)print{
    NSLog(@"MyAge is %d",_age);
}
@end
           

main.m

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *person = [[Person alloc] init];
        
        [person setValue:@"88" forKeyPath:@"_age"];
        [person print];
    }
    return NSApplicationMain(argc, argv);
}
           

3.KVC 字典轉模型

字典轉模型的正規操作:

Person.m:

- (instancetype)initWithDict:(NSDictionary *)dict{
    if(self = [super init]){
        self.money = [dict[@"money"] floatValue];
        self.name = dict[@"name"];
    }
    return  self;
}

+ (instancetype)personWithDict:(NSDictionary *)dict{
    return [[self alloc]initWithDict:dict];
}
           

main.m:

NSDictionary *dict [email protected]{
            @"name":@"cailei",
            @"money":@1888
        };
        Person *person = [Person personWithDict:dict];
        
        NSLog(@"%@",person);
           
IOS學習之 Xib KVC KVO1.xib 的基本使用2. KVC 的使用3.KVC 字典轉模型4. KVO (Key Value Observer)
上面的字典轉模型方式有個弊端,當你的字典中的屬性非常多的時候,那麼你在 Person 的構造方法中指派語句也會越來越多。 是以可以用下面方式代替指派語句:
[self setValuesForKeysWithDictionary:dict] 
           
  • 但是一般不用上述方法,因為上述方法中轉化的必要條件是字典中的key必須在模型中找到。如果模型中帶有模型,也轉化不過來。

4. KVO (Key Value Observer)

KVO 相當于觀察者模式,觀察自身的資料的變化。先”“addObserver”“設定觀察者,然後在observeValueForKeyPath 監聽值的改變
IOS學習之 Xib KVC KVO1.xib 的基本使用2. KVC 的使用3.KVC 字典轉模型4. KVO (Key Value Observer)