OC KVO

来源:互联网 发布:安徽中港金融数据 编辑:程序博客网 时间:2024/05/22 03:48

===============Item==================

#import <Foundation/Foundation.h>


@interface Item : NSObject

@property (nonatomic,strong)NSString*name;

@property (nonatomic,assign)double price;

@end


#import "Item.h"


@implementation Item

@synthesize name,price;

@end


===============ItemView==================

#import <Foundation/Foundation.h>


@class Item;

@interface ItemView : NSObject

@property (nonatomic,strong)Item*item;

-(void)showItemInfo;

@end


#import "ItemView.h"

#import "Item.h"


@implementation ItemView

@synthesize item=_item;


-(void)showItemInfo{

    NSLog(@"name=%@,price=%f",_item.name,_item.price);

}


-(void)setItem:(Item *)item{

    self->_item = item;

    //为item添加监器,监听item的name属性的改变

    [self.itemaddObserver:selfforKeyPath:@"name"options:NSKeyValueObservingOptionNewcontext:nil];

    //为item添加监器,监听item的price属性的改变

    [self.itemaddObserver:selfforKeyPath:@"price"options:NSKeyValueObservingOptionNewcontext:nil];

}


//重写方法,当被监听的数据模型发生改变时,就会回调监听器的方法

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

    NSLog(@"===observeValueForKeyPath方法被调用===");

    NSLog(@"被修改的keyPath为:%@",keyPath);

    NSLog(@"被修改的对象为:%@",object);

    NSLog(@"被修改的属性的值为:%@",[change objectForKey:@"new"]);

    NSLog(@"被修改的上下午为:%@",context);

}

-(void)dealloc{

    [self.itemremoveObserver:selfforKeyPath:@"name"];

    [self.itemremoveObserver:selfforKeyPath:@"price"];

}

@end



===============main==================

#import <Foundation/Foundation.h>

#import "ItemView.h"

#import "Item.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        Item* item = [[Itemalloc]init];//修改属性

        //设置item属性

        item.name = @"IOS";

        item.price = 109;

        

        ItemView * itemView = [[ItemViewalloc]init];

        [itemView setItem:item];

        [itemView showItemInfo];

        

        item.name = @"JAVA";

        item.price = 888;

        

        

    }

    return 0;

}



原创粉丝点击