objective-c(六)关于KVC模式
在objective-c的编程中。提供了kvc模式来更灵活的取值赋值工作。
只要通过
[对象 setValue:@"str" forKey:@"str"];//设置对象值
[对象 valueForKey:@"str"];//取值
来进行动态的使用。
而且当对象的成员变量是另外一个对象时。可是使用点标记来定位,
[对象 setValue:@"str" forKeyPath:@"str"];//使用点标记来定位赋值
[对象 valueForKeyPath:@"str"];//使用点标记来定位取值
这是在一对一的关系中,如果使用了@property标签。说明不用写存储器方法。如果不使用,那么要写相应的存储器方法。
在一对多的关系中。需要的是使用正常@property标签的同时,或者手动编写存储器方法后。有一些函数可以帮助计算。
[对象 valueForKeyPath:@"@avg.str"];//取到平均数
[对象 valueForKeyPath:@"str.@count"];//取数量特殊
常用函数有
@avg 返回集合平均数
@count 返回集合元素个数
@max 返回集合最大数
@min 返回集合最小数
@sum 返回集合总和
还有其他函数。需要时可以百度搜索 kvc函数
因为明知道取回的数据时数组或者集合。可以使用函数来计算。
在使用一对多的对象时,和java的hibernate相同。考虑了对象见的关系。在使用时除了需要的正常存储器方法。还必须实现其他的特殊方法。这两种特殊方法分别是:
一.索引存储器方法 索引存储器方法针对的是返回有序数组的方法:NSArray。
索引存储器方法分为:
1.不可变的,返回的就是一个普通的固定长度的数组。
必须实现的方法有:
-(NSUInteger) countOf<成员变量名>;//获取长度
-(id) object<成员变量名>AtIndex:索引;//根据索引获取某个元素
最后是可选方法(用来提高搜索性能)
-(void) get<成员变量名>:(对象 **)outBuffer range:(NSRange) inRange://根据条件搜索。本存储器为可选。不是必须
2.可变的。返回的是一个可以自动变更长度的数组
-(void) insertObject:in<成员变量名> AtIndex:index;//根据索引插入元素
-(void) removeObjectFrom<成员变量名>AtIndex:inIndex;//根据索引删除元素
-(void) replaceObjectIn<成员变量名>AtIndex:(NSInteger )index withObject:(id) in<成员变量名>;//根据索引替换元素
二.无序存储器方法 无序存储器方法针对的是返回无序集合的方法:NSSet。
1.不变的,返回的是一个固定长度的
必须实现的方法有:
-(NSUInteger) countOf<成员变量名>;//获取集合长度
-(NSEnumerator *)enumeratorOf<成员变量名>;//返回该集合的key值
-(对象 *)memberOf<成员变量名>:(Bar *) inBar;//返回根据一个元素获得所有isEqual为真的所有元素
2.可变的,返回一个可以添加长度的集合
-(void) add<成员变量名>Object:<对象 *> in<成员变量名>;//用来添加元素
-(void) remove<成员变量名>Object:<对象 *> in<成员变量名>;//用来删除元素
-(void) intersect<成员变量名>:(NSSet *)in<成员变量名>://取交集(共同有的值)