一个对象与它的对象属性有三种类型的关系
- Attributes 这类属性就是简单的数值类型
- scalars,
- strings
- Boolean values
- To-one relationships.
- 属性是一个对象,该对象又有有自己的属性。
- To-many relationships
- 该属性是个集合(NSArray,NSSet)
- (NSArray,NSSet)内部是其他的对象
@interface BankAccount : NSObject
// An attribute
@property (nonatomic) NSNumber* currentBalance;
// A to-one relation
@property (nonatomic) Person* owner;
// A to-many relation
@property (nonatomic) NSArray< Transaction* >* transactions;
@end
使用key来访问Attributes类型的属性
一个类实现了NSKeyValueCoding的协议,这个类的对象就支持了KVC。一个继承了NSObject的对象,会默认支持KVC, 因为 NSObject 提供了NSKeyValueCoding 的默认实现。
获取值
-
valueForKey:、valueForKeyPath:- 如果key不存在,会调用
valueForUndefinedKey: -
valueForUndefinedKey:默认抛出异常NSUndefinedKeyException,子类可以重写此方法,提供其他的实现
- 如果key不存在,会调用
-
dictionaryWithValuesForKeys:- 返回对应keys的一个value数组
- 对应的set方法为
setValuesForKeysWithDictionary: - 注意集合里面不可以包含nil,对应的key的value为nil,需要用
NSNull来替代
设置值
-
setValue:forKey:、setValue:forKeyPath:- 如果key不存在,会调用
setValue:forUndefinedKey: -
setValue:forUndefinedKey:默认抛出异常NSUndefinedKeyException,子类可以重写此方法,提供其他的实现
- 如果key不存在,会调用
-
setValuesForKeysWithDictionary:- 通过字典给对应key的属性赋值
- 相当于对每个键值对调用
setValue:forKey:或setValue:forKeyPath:
-
setNilValueForKey:- 默认不允许,会抛出
NSInvalidArgumentException - 子类可以重写此方法,提供其他的实现
- 默认不允许,会抛出











网友评论