iOS KVC补充及实例

KVC 补充及实例

怎么获取值 和 修改值—–>How

 - (void)setValue:(id)value forKey:(NSString *)key
 - (id)valueForKey:(NSString *)key
 - (id)valueForKey:(NSString *)key //以 key 作为标示符,获取其对应的属性值
 - (void)setValue:(id)value forKey:(NSString *)key //以 key 作为标示符设置其对应的属性值
 - (id)valueForUndefinedKey:(NSString *)key
 - (void)setNilValueForKey:(NSString *)key
 ```

 Demo
 创建一个QYPerson 类继承于 NSObject
 QYPerson.h

 ```
 #import <Foundation/Foundation.h>

@interface QYPerson : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) int age;

- (void)changeName;
@end

在 QYPerson.m 文件中实现上面的方法

#import "QYPerson.h"

@implementation QYPerson

- (void)changeName
{
    _name = @"changeName";
}
@end

创建一个 QYPersonMonitor 的类用来监视 QYPerson 中的 name 属性

在. m 文件中实现对 QYPerson 中 name 属性的监视

 #import "QYPersonMonitor.h"

@implementation QYPersonMonitor
// 2. 回调的方法 当观察的值改变的时候,该方法会被调用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqual:@"name"]) {
        NSLog(@"change name: old :%@,   new : %@",[change objectForKey:NSKeyValueChangeOldKey],[change objectForKey:NSKeyValueChangeNewKey]);
    }
}

@end

在控制器中初始化监视的对象以及被监视的对象,注册观察者

 #import "ViewController.h"
#import "QYPerson.h"
#import "QYPersonMonitor.h"

@interface ViewController ()
@property (nonatomic, strong) QYPerson *person;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //初始化被监视的对象
    _person = [[QYPerson alloc] init];
    _person.name = @"zhangsan";
    _person.age = 18;

    //监视对象
    QYPersonMonitor *personMonitor = [[QYPersonMonitor alloc] init];
    // 1. 注册了一个观察者
    [_person addObserver:personMonitor forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

    //初始化的值
    NSLog(@"person‘s name is %@",_person.name);

    //通过 setvalue 的方法,此时 QYPersonMonitor 的监视将被调用
    [_person setValue:@"(lisi by KVC)" forKey:@"name"];

    //打印通过 kvc 方式修改后的值
    NSLog(@"person‘s name get by kvc is %@",[_person valueForKey:@"name"]);

    //通过.语法修改的效果和通过 setvalue 是一致的
    _person.name = @"name change by .name= wangwu";
    //通过 person 自己的函数来更改 name 属性
    [_person changeName];
}

@end

打印结果如下:

**2015-07-29 16:38:59.802 SetDemo[3764:1391043] person’s name is zhangsan

2015-07-29 16:38:59.802 SetDemo[3764:1391043] change name: old :zhangsan, new : (lisi by KVC)

2015-07-29 16:38:59.802 SetDemo[3764:1391043] person’s name get by kvc is (lisi by KVC)

2015-07-29 16:38:59.802 SetDemo[3764:1391043] change name: old :(lisi by KVC), new : name change by .name= wangwu**

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-04 03:29:13

iOS KVC补充及实例的相关文章

蓝懿 iOS KVC补充及实例

vc-补充及实例">KVC 补充及实例 怎么获取值 和 修改值—–>How - (void)setValue:(id)value forKey:(NSString *)key - (id)valueForKey:(NSString *)key - (id)valueForKey:(NSString *)key //以 key 作为标示符,获取其对应的属性值 - (void)setValue:(id)value forKey:(NSString *)key //以 key 作为标示符设

iOS KVC详细讲解

iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制. 以上就是KVC的理论,面试时,如实回答就可以啦! 使用KVC说明 KVC间接修改对象属性时,会自动判断对象属性的类型,完成相应的转换. KVC按键值路径取值时,如果对象不包含指定的键值,那么就会自动进入对象内部,查找对象属性. KVC可以嵌套按照键值路径取值.

iOS之微博UI实例--拟物化设计(未彻底成功)

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

IOS UIDevice & IOS检测屏幕旋转实例

一 UIDevice 简介 UIDevice类提供了一个单例实例代表当前的设备.从这个实例中可以获得的信息设备,比如操作系统名称.电池电量值(batteryLevel).电池状态(batteryState).设备的类型(model,比如iPod.iPhone等).设备的系统(systemVersion) 二 获取 UIDevice 实例 通过[UIDevice currentDevice]可以获取这个单粒对象 UIDevice *device = [UIDevice currentDevice]

IOS消息机制应用实例--异常处理

IOS消息机制应用实例--异常处理 最近发现了一个在项目中常用的异常处的工具NullSafe,分析了它的实现原理,不小心发现了一个小Bug,现将其分享出来,关于这篇文章的Demo已经上传至GitHub,看完如有收获,欢迎Star,如有疑问欢迎issue,大家一起学习.在IOS开发中我们可能会遇到下面的情景:服务器给我们返回得某个字段是null,比如someValue:null,这个时候我们利用第三方工具转化之后会得到someValue = <null>,这个时候如果我们判断这个someValu

iOS KVC/KVO总结

http://www.cnblogs.com/QM80/p/3647819.html 如果要修改对象的属性值 1.一般情况下是直接利用对象属性的set方法来修改: Student *stu = [[Student alloc] init]; // set方法的两种书写格式 [stu setAge:10]; stu.age = 10; 2.但是如果不知道对象类型呢?那么就可以运用KVC键值编码(Key Value Coding) 间接的修改对象属性 KVC实现方式是:使用字符串来描述对象需要修改的

iOS 成员变量,实例变量,属性变量的区别,联系

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve

iOS.KVC.setValue:forKey:

Foundation Framework 定义了 NSObject(NSKeyValueCoding), - (void)setValue:(id)value forKey:(NSString *)key; 该接口的说明 1. 先在message receiver的class中搜索方法 -set<Key>: 2. 如果1中未找到,则在class中以此搜索 _<key>, _is<key>, <key>, is<Key> 实例变量 3. 如果2中未

KVC浅析和实例

KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC 实现的关键技术之一. 一个对象拥有某些属性.比如说,一个 Person 对象有一个 name 和一个 address 属性.以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 a