KVC

概念:

        KVC(键值编码)是一种间接访问对象是实例变量的机制,该机制可以不通过存储方法就可以访问对象的实例变量


1,KVC可以设置改变系统控件只读属性

 //UITabBar的属性是readOnly,我们不能直接自定义控件和改变系统taBar
    WBUITabBar *tabbar = [[WBUITabBar alloc] init];
    [self setValue:tabbar forKeyPath:@"tabBar"];

2,keyPath和key的区别

//简单情况下,是没有区别的  
  [p.dog setValue:@"wangcai" forKey:@"name"];
  [p.dog setValue:@"larry" forKeyPath:@"name"];
//复杂情况下,key不能读取下一层属性
  [p setValue:@"hashiqi" forKeyPath:@"dog.name"];
  [p setValue:@"hashiqi" forKey:@"dog.name"]; // 写法错误XXXXXXXXXXXXX
  
    forKeyPath包含了forKey的功能,以后使用forKeyPath就可以了
    forKeyPath中可以利用.运算符, 就可以一层一层往下查找对象的属性

3,利用KVC快速将属性值添加到数组

        Person *p = [[Person alloc] init];
        
        Book *book1 = [[Book alloc] init];
        book1.name = @"5分钟突破iOS开发";
        book1.price = 10.5;
        
        Book *book2 = [[Book alloc] init];
        book2.name = @"5分钟突破android开发";
        book2.price = 18.5;
        
        Book *book3 = [[Book alloc] init];
        book3.name = @"5分钟突破前端开发";
        book3.price = 20.5;
        
        Book *book4 = [[Book alloc] init];
        book4.name = @"5分钟突破PHP开发";
        book4.price = 10.5;
        
        p.books = @[book1, book2, book3, book4];

//普通方法
        // 获得所有的书名(将所有的书名放到一个数组中)
       NSMutableArray *names = [NSMutableArray array];
       for (Book *book in p.books) {
            [names addObject:book.name];
        }
//高效方法        
        // 取出books数组中每一个元素的name属性值,放到一个新的数组中返回
        NSArray *names = [p valueForKeyPath:@"books.name"];
        NSLog(@"%@", names);

4,利用KVC获得的数值进行简单运算

        NSNumber *avgNumber = [p valueForKeyPath:@"[email protected]"];
        NSNumber *sumNumber = [p valueForKeyPath:@"[email protected]"];


你可能感兴趣的:(KVC)