標籤:style blog http io color os ar 使用 for
1. 什麼是kvc
kvc--key-value coding,健值編碼
可以通過key直接存取對象屬性的value的方法
2.使用情境
kvc主要是為了讓代碼變的更簡介明了
用的比較多的是在後台資料解析,還有訪問一些沒有setter,getter方法的屬性
3.代碼解析:
定義都在NSKeyValueCoding.h中
主要兩個方法:
//key為當前類的屬性名稱- (id)valueForKey:(NSString *)key; //當類沒有名為key的屬性時會調用拋出異常,可以複寫valueForUndefinedKey:方法,作處理- (void)setValue:(id)value forKey:(NSString *)key;//當類沒有名為key的屬性時會調用拋出異常,可以複寫- (void)setValue:(id)value forUndefinedKey:(NSString *)key:方法,作處理//keyPath 為訪問屬性的路徑,比如:@"person.name",person是當前類的屬性,name是person類的一個屬性名稱- (id)valueForKeyPath:(NSString *)keyPath;- (void)setValue:(NSValue *)value forKeyPath:(NSString *)keyPath;
異常處理
- (id)valueForUndefinedKey:(NSString *)key;- (void)setValue:(id)value forUndefinedKey:(NSString *)key
代碼舉例:
@interface ViewController () @property (nonatomic, weak) NSString *viewString;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"----[%@]",[self valueForKey:@"viewString"]); NSLog(@"----[%@]",[self valueForKey:@"viewArray"]); [self setValue:@"testForViewString" forKey:@"viewString"]; [self setValue:@"1" forKey:@"viewArray"]; }- (void)setValue:(id)value forUndefinedKey:(NSString *)key { NSLog(@"【warning】!!!!!!---Undefined--key[%@]--!!!!!!",key);}- (id)valueForUndefinedKey:(NSString *)key { if ([key isEqualToString:@"viewArray"]) { return @"aaaa"; } else { return [super valueForUndefinedKey:key]; }}
實現原理
參考 http://www.tuicool.com/articles/M7vQRj
感謝這篇文章,寫的很詳細
但有個疑問:
雖然說這幾個方法一般不會去調用或者用到,但是我嘗試了一下,系統並沒有調用這些方法,而是直接走到了
- (id)valueForUndefinedKey:(NSString *)key
IOS開發-KVC