概念:
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]"];
时间: 2024-10-05 17:13:21