zoukankan      html  css  js  c++  java
  • iOS之KVC

    /**

         *  KVC -- Key Value Coding (键值编码)

         * 1KVC是一种间接访问对象实例变量的方式,使用该机制不需要调用存取方法和变量实例就可以访问对象的属性

         *   KVC 方法存在于NSKeyValueCoding中,默认实现方式由NSObject提供

         *   KVC 支持带有对象值得属性,同时也支持纯数值类型和结构

         *   当使用setValue:forKey:赋值时 它会自动完成对象到标量的转换

         *   当使用ValueForKey取值的时候 它会完成标量向对象的转换

         * 2KVC中的基本调用包括-idvalueForKey:(NSString *)Key; -voidsetValue:(id)Value forKey:(NSString *)key;这两方法,它们以字符串的形式向对象发送消息(字符串是我们关注属性的关键)。如果不存在setter getter方法,它将在内部查找名为key_key的实例变量。

         * 3kvc支持路径访问 “.” 号分隔

         * 4、一对多的访问如果想NSArray请求一个键值,它实际上会查询数组中的每个对象来查找这个键值,然后将查询结果打包到另一个数组中并返回给你

         * 5、可以利用kvc做一些简单的运算 sum min max avg count 运算字段必须是数值类型NSNumber或基本数据类型,计算结果是NSNumber

         */

        

        Person *p1 = [[Person alloc] init];

        [p1 setValue:@"张三"forKey:@"_name"];

        [p1 setValue:@""forKey:@"sex"];

        [p1 setValue:@24forKey:@"age"]; // @24 NSNumber的对象

        NSLog(@"%@", p1);

        

        NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:@"李四",@"name", @"", @"sex", @25, @"age", nil];

        Person *p2 = [[Person alloc] init];

        [p2 setValuesForKeysWithDictionary:info];

        NSLog(@"%@", p2);

        

         NSDictionary *info2 = [NSDictionary dictionaryWithObjectsAndKeys:@"王五",@"name", @"", @"sex", @26, @"age", nil];

        Person *p3 = [[Person alloc] init];

        [p3 setValuesForKeysWithDictionary:info2];

        NSLog(@"%@", p3);

        

        // 一对多

        NSArray *persons = [NSArray arrayWithObjects:p1, p2, p3, nil];

        NSArray *names = [persons valueForKey:@"name"];

        NSLog(@"%@", names);

        

        // 简单运算

        NSNumber *avgAge = [persons valueForKeyPath:@"@avg.age"];

        NSNumber *count = [persons valueForKeyPath:@"name.@count"];

        NSNumber *sumAge = [persons valueForKeyPath:@"@sum.age"];

        NSNumber *maxAge = [persons valueForKeyPath:@"@max.age"];

        NSNumber *minAge = [persons valueForKeyPath:@"@min.age"];

        /**

         *  [xxx valueForKeyPath:@"路径key.@sum.要运算的key"] 在简单运算中先写入一个路径,在最后要运算的属性前加 @sum @avg @min @max @count 要运算的字段必须是数值类型NSNumber或者基本数据类型,计算的结果是NSNumber

         */

        NSLog(@"minAge:%@", minAge);

        NSLog(@"maxAge:%@", maxAge);

        NSLog(@"sumAge:%@", sumAge);

        NSLog(@"count:%@", count);

        NSLog(@"avgAge:%@", avgAge);

  • 相关阅读:
    java Class的 getSuperclass与getGenericSuperclass区别
    再有人问你volatile是什么,把这篇文章也发给他
    深入理解乐观锁与悲观锁
    再有人问你Java内存模型是什么,就把这篇文章发给他
    再有人问你synchronized是什么,就把这篇文章发给他
    《成神之路-基础篇》JVM——Java内存模型(已完结)
    css
    css
    require.js
    css -border
  • 原文地址:https://www.cnblogs.com/NatureZhang/p/3718142.html
Copyright © 2011-2022 走看看