一个对象与它的对象属性有三种类型的关系
- 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
- 子类可以重写此方法,提供其他的实现
- 默认不允许,会抛出
网友评论