zoukankan      html  css  js  c++  java
  • IOS开发-KVC

    1. 什么是kvc

    kvc--key-value coding,健值编码

    可以通过key直接访问对象属性的value的方法

    2.使用场景

    kvc主要是为了让代码变的更简介明了

    用的比较多的是在后台数据解析,还有访问一些没有setter,getter方法的属性

    3.代码解析:

    定义都在NSKeyValueCoding.h中

    主要两个方法:

    //key为当前类的属性名
    
    - (id)valueForKey:(NSString *)key;  //当类没有名为key的属性时会调用抛出异常,可以复写valueForUndefinedKey:方法,作处理
    
    - (void)setValue:(id)value forKey:(NSString *)key;//当类没有名为key的属性时会调用抛出异常,可以复写- (void)setValue:(id)value forUndefinedKey:(NSString *)key:方法,作处理
    
    
    
    //keyPath 为访问属性的路径,比如:@"person.name",person是当前类的属性,name是person类的一个属性名
    
    - (id)valueForKeyPath:(NSString *)keyPath;
    
    - (void)setValue:(NSValue *)value forKeyPath:(NSString *)keyPath;

    异常处理

    - (id)valueForUndefinedKey:(NSString *)key;
    
    - (void)setValue:(id)value forUndefinedKey:(NSString *)key

    代码举例:

    @interface ViewController () 
    
    @property (nonatomic, weak) NSString *viewString;
    
    @end
    
    
    @implementation ViewController
    
    
    - (void)viewDidLoad {
    
        [super viewDidLoad];
    
        NSLog(@"----[%@]",[self valueForKey:@"viewString"]);
    
        NSLog(@"----[%@]",[self valueForKey:@"viewArray"]); 
    
        [self setValue:@"testForViewString" forKey:@"viewString"];
    
        [self setValue:@"1" forKey:@"viewArray"];
    
     }
    
    
    - (void)setValue:(id)value forUndefinedKey:(NSString *)key {
        NSLog(@"【warning】!!!!!!---Undefined--key[%@]--!!!!!!",key);
    }
    
    
    - (id)valueForUndefinedKey:(NSString *)key {
        if ([key isEqualToString:@"viewArray"]) {
            return @"aaaa";
        }
        else {
            return [super valueForUndefinedKey:key];
        }
    }

    实现原理

    参考 http://www.tuicool.com/articles/M7vQRj

    感谢这篇文章,写的很详细

    但有个疑问:

    虽然说这几个方法一般不会去调用或者用到,但是我尝试了一下,系统并没有调用这些方法,而是直接走到了

    - (id)valueForUndefinedKey:(NSString *)key

  • 相关阅读:
    Nginx+IIS+Redis 处理Session共享问题 2
    Nginx+IIS+Redis 处理Session共享问题 1
    [ZooKeeper.net] 1 模仿dubbo实现一个简要的http服务的注册 基于webapi
    使用小技巧使子功能模块不污染主框架
    sqlserver 去除重复的行数据
    setsockopt用法详解
    windows 非窗口定时器
    Redis list 之增删改查
    王垠:如何掌握程序语言(转)
    【练习】整树转换为16进制的字符串的函数
  • 原文地址:https://www.cnblogs.com/strick/p/4046434.html
Copyright © 2011-2022 走看看