首页 > 其他 > 详细

1 kvo(键值监听)

时间:2015-09-24 21:04:52      阅读:171      评论:0      收藏:0      [点我收藏+]

定义一个普通的类

1

#import <Foundation/Foundation.h>

#import<UIKit/UIKit.h>

@interface LXXperson : NSObject

@property(nonatomic,copy)NSString *name;

@property(nonatomic,assign)NSInteger age;

@property(nonatomic,assign)CGFloat height;

@end

 

#import "LXXperson.h"

@implementation LXXperson

-(void)setName:(NSString *)name{

 _name =name;

}

@end

2

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

#import "ViewController.h"

#import "LXXperson.h"

@interface ViewController ()

@property(nonatomic,strong)LXXperson *p;

@end

 

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

//kvo 键值监听 :监听对象属性的改变 如果你改变了 告诉我

    LXXperson *p =[[LXXperson alloc] init];

    p.name =@"小心";

    p.age =18;

    p.height=1.78;

    self.p =p;

//    NSKeyValueObservingOptionNew = 0x01, 新值

//     NSKeyValueObservingOptionOld = 0x02,  旧值

//keypath 键路径  key 键

    //

       [p addObserver:self forKeyPath:@"height" options:NSKeyValueObservingOptionOld  |NSKeyValueObservingOptionNew context:nil];

    p.height =1.8;

    // p 调用方法  取isa指针指向的类对象方法列表中去找

    //系统会自己创建一个名为 NSKVONotifying_CZPerson 是person的子类

 /*

  就是说,kvc 创建一个person的子类 重写 子类的set方法 做到只要值改变就会调用子类的set方法

  子类的set方法里面还要调用父类   的set方法 在子类中[控制器对象 observeValueForKeyPath]

  方法会做三件事:1控制器对象的保存 2.参数 保存 3.多态 父类指针指向子类对象 子类往上面调用

  这里创建叫NSKVONotifying_CZPerson 子类调用子类的set 改变person 的isa 就是说子类调用自己的set方法  在自己set方法中,再去调用父类的set方法 [supper set];

*/

 }

//键值监听 值改变就会调用

/**

 *  键值监听 值改变就会调用

 *

 *  @param keyPath 属性

 *  @param object  对象

 *  @param change  字典 改变后数据

 *  @param context 附加参数

 */

 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

    NSLog(@"%@",change);

    NSLog(@"%f",self.p.height);

}

//移除监听者

-(void)dealloc{

[self.p removeObserver:self forKeyPath:@"height"];

}

@end

 

1 kvo(键值监听)

原文:http://www.cnblogs.com/lxlmq412/p/4836313.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!