博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KVO 简单使用
阅读量:6419 次
发布时间:2019-06-23

本文共 2171 字,大约阅读时间需要 7 分钟。

http://www.verydemo.com/demo_c134_i5320.html1、什么是KVO?Key-Value-Observing(KVO,键值观察):当指定的对象的属性被修改了,允许对象接受到通知的机制。每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。2、KVO有什么优点?当有属性改变,KVO会提供自动的消息通知。3、KVO实现1)注册观察者(Registering as an Observer),指定被观察的属性。addObserver:forKeyPath:options:context:2)接收变化通知(Receiving Notification of a Change),实现回调方法。observeValueForKeyPath:ofObject:change:context:3)移除观察者(Removing an Object as an Observer)removeObserver:forKeyPath:4、简单示例1)创建一个简单的SingleView模板的iPhone应用,我取名为KVODemo。2)在界面添加一个label和一个button,并生成相应的outlet。下面ViewConroller.h和ViewConroller.mViewConroller.h源码清单:#import 
@interface ViewController : UIViewController@property (retain,nonatomic) IBOutlet UILabel *label;- (IBAction)buttonPressed:(UIButton *)sender;@endViewConroller.m源码清单:#import "ViewController.h"@interface ViewController (){ NSString *_str;}@property (nonatomic,retain) NSString *str;@end@implementation ViewController@synthesize label=_label;@synthesize str=_str;- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. _str =@"sharon"; _label.text = _str; // 添加Observer 这样被注册的属性发生改变的时候Observer回调方法就被调用 [selfaddObserver: selfforKeyPath: @"str"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];}- (IBAction)buttonPressed:(UIButton *)sender { static BOOL flag =YES; if (flag) { // 修改正在监听的属性值 [selfsetValue: @"joe"forKey: @"str"]; }else { // 修改正在监听的属性值 [selfsetValue: @"sharon"forKey: @"str"]; } flag = !flag; }// 实现Observer的回调方法- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { // 如果改变的属性是"name" if ([keyPath isEqualToString:@"str"]) { _label.text = [self valueForKey:@"str"]; // 输出改变前的值 NSLog(@"old str is %@",[changeobjectForKey:@"old"]); // 输出改变后的值 NSLog(@"new str is %@",[changeobjectForKey:@"new"]); }}-(void)dealloc{ // 移除Observer [selfremoveObserver:selfforKeyPath:@"name"]; [super dealloc];}@end

转载于:https://www.cnblogs.com/zhangsongbai/archive/2013/05/06/3102588.html

你可能感兴趣的文章
ifconfig:command not found的解决方法
查看>>
计算机是怎么存储数字的
查看>>
Codeforces Round #369 (Div. 2) A. Bus to Udayland 水题
查看>>
adb上使用cp/mv命令的替代方法(failed on '***' - Cross-device link解决方法)
查看>>
C++标准库简介、与STL的关系。
查看>>
Spring Boot 3 Hibernate
查看>>
查询EBS请求日志的位置和名称
查看>>
大型机、小型机、x86服务器的区别
查看>>
J2EE十三个规范小结
查看>>
算法(第四版)C#题解——2.1
查看>>
网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?...
查看>>
大数据开发实战:Stream SQL实时开发一
查看>>
C++返回引用的函数例程
查看>>
dll 问题 (转)
查看>>
使用sql生成UUID
查看>>
mysql日期函数(转)
查看>>
REST API用得也痛苦
查看>>
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>
读javascript高级程序设计14-错误处理与调试
查看>>