KVC
全称:Key-value observing
用法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@interface Book : NSObject @property (nonatomic, strong) NSString *bookName; @end @interface Person : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) NSInteger age; @property (nonatomic, strong) Book *book; @end
#import <Foundation/Foundation.h> #import "Person.h" #import "Book.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [[Person alloc]init]; //类 [p setValue:@"张三" forKey:@"name"]; [p setValue:@"20" forKeyPath:@"age"]; Book *book = [[Book alloc]init]; p.book = book; [p setValue:@"算法导论" forKeyPath:@"book.bookName"]; NSLog(@"%@, %@ , bookName: %@",p.name,[p valueForKey:@"age"],p.book.bookName); //字典 book.bookName = @"数据结构"; NSDictionary *dict = @{@"name":@"李四",@"age":@"40",@"book":book}; [p setValuesForKeysWithDictionary:dict]; NSLog(@"%@, %@ , bookName: %@",p.name,[p valueForKey:@"age"],p.book.bookName); //数组 Person *p2 = [[Person alloc] init]; p2.name = @"yellow Mokey"; Person *p3 = [[Person alloc] init]; p3.name = @"red dog"; Person *p4 = [[Person alloc] init]; p4.name = @"green chicken"; NSArray *array = @[p2,p3,p4]; // 把三个对象中的name 取出来 NSArray *nameArray = [array valueForKeyPath:@"name"]; NSLog(@"%@",nameArray); } return 0; }