码迷,mamicode.com
首页 > 移动开发 > 详细

蓝懿 iOS KVC补充及实例

时间:2015-12-26 01:15:43      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

怎么获取值 和 修改值—–>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 

@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

 

蓝懿 iOS KVC补充及实例

标签:

原文地址:http://www.cnblogs.com/hahahahahaha/p/5077335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!