1.什么是KVO
- KVO == (Key-Value Observing)
- 当指定的对象中某个指定的属性的值改变的时候,此对象接收到通知的机制;
//我们自定义一个模型类 "Person.h"
//在.h文件中我们可以声明几个属性
@interface Person : NSObject
/** 年龄 */
@property (nonatomic, assign) int age;
/** 成绩 */
@property (nonatomic, assign) int performance;
/**姓名 */
@property (strong, nonatomic) NSString *name;
@end
//随便在一个ViewController里面应用此类
@interface PRFLabelController : UIViewController
/*显示消息的label*/
@property (nonatomic,strong) UILabel *personImformationLabel;
/**被显示的人物对象*/
@property (nonatomic,strong) Person *person;
@end
#import "PRFLabelController.h"
@interface PRFLabelController ()
/**最新的成绩*/
@property (nonatomic,assign) int newPerformance;
/**更新成绩的按钮*/
@property (strong, nonatomic) UIButton *updateBtn;
@end
//控制器的.m文件
@implementation PRFLabelController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//初始化模型对象
self. person = [[Pserson alloc] init];
self.person.age = 18; //初始化属性值
self.person.name = @"prf";
self.person.performaance = 0;
//指定一个新成绩
self. newPerformance = 60;
//添加kvo监听
[self. person addObserver:self forKeyPath:@"performance" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]; //options参数是用于指定在值修改以后,反馈回来的是新值还是旧值
//初始化更新按钮 (不具体写了)
//self.updateBtn 添加一个 updateperformance 的点击事件
}
//点击按钮时更改对象成绩
-(void) updateperformance{
//更新对象的成绩
[self.person setValue:@(self.newperformance) forKey:@"performance"];
//修改新成绩 <这不是必要的>
self.newperformance +=2;
}
//Person对象监听到属性值变化后,自动执行以下方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"%@",change);//改变的数据(包含该改变前的和改变后的数据)
//判断修改的属性是否为performance才执行对应的时间
if([keyPath isEqualToString:@"performance"]){
//此处写监听到键值内容改变后想要做的对应的事情
}
}
#pragma mark 控制器销毁的时候记得移除监听
- (void)dealloc{
[self.person removeObserver:self forKeyPath:@"price"];
}
@end
网友评论