OC KVO

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

#import <Foundation/Foundation.h>


@interface Item : NSObject

@property (nonatomic,strong)NSString*name;

@property (nonatomic,assign)double price;

@end


#import "Item.h"


@implementation Item

扫描二维码关注公众号,回复: 211499 查看本文章

@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.item addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];

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

    [self.item addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew context: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.item removeObserver:self forKeyPath:@"name"];

    [self.item removeObserver:self forKeyPath:@"price"];

}

@end



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

#import <Foundation/Foundation.h>

#import "ItemView.h"

#import "Item.h"


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

    @autoreleasepool {

        

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

        //设置item属性

        item.name = @"IOS";

        item.price = 109;

        

        ItemView * itemView = [[ItemView alloc]init];

        [itemView setItem:item];

        [itemView showItemInfo];

        

        item.name = @"JAVA";

        item.price = 888;

        

        

    }

    return 0;

}



猜你喜欢

转载自blog.csdn.net/luochenlong/article/details/78783969
KVO