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<成员变量名>://取交集(共同有的值)  

原文地址:https://www.cnblogs.com/imtodd/p/6647384.html