概述
- kvc 提供了间接访问对象属性的一种方法,是被
NSKeyValueCoding
协议来驱动的 - 如果一个对象遵从了kvc,这个对象的属性可以通过字符串(key, key有一套明确的,统一的接口定义)来存取。
- 是在setter和getter 方法之外,另一种访问对象属性的方法。
kvc 可以实现的功能
- 访问对象属性
valueForKey: setValue:forKey:
- 操纵集合属性
mutableArrayValueForKey: mutableArrayValueForKeyPath: mutableSetValueForKey: mutableSetValueForKeyPath: mutableOrderedSetValueForKey: mutableOrderedSetValueForKeyPath:
- 在集合属性上调用集合方法
@avg @count @max @min @distinctUnionOfObjects @unionOfObjects @distinctUnionOfArrays @unionOfArrays @distinctUnionOfSets
- 访问基本类型(int,BOOL, float..)和结构体类型(NSPoint,NSSize ,自定义结构体, ...)的属性
基本类型 需要用NSNumber来包装一下,例如 BOOL-numberWithBool:-boolValue int-numberWithInt:-intValue 结构体类型 需要用NSValue来包装一下, 例如 NSPoint-valueWithPoint:-pointValue NSSize-valueWithSize:-sizeValue 使用NSValue包装其他的非对象类型,例如 ThreeFloats floats = {1., 2., 3.}; NSValue* value = [NSValue valueWithBytes:&floats objCType:@encode(ThreeFloats)]; [myClass setValue:value forKey:@"threeFloats"];
- 通过
key path
来访问属性,可以很方便的通过路径去访问深层次的属性valueForKeyPath:; setValue: forKeyPath:
网友评论