文档章节

iOS:KVO的概述与使用

lewis-180
 lewis-180
发布于 2015/02/06 10:30
字数 539
阅读 10
收藏 0

一,概述

KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

二,使用方法

系统框架已经支持KVO,所以程序员在使用的时候非常简单。

1. 注册,指定被观察者的属性,

2. 实现回调方法

3. 移除观察

三,实例:

假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其价格。

1.定义DataModel,

[cpp] view plaincopy

  1. @interface StockData : NSObject {  

  2.     NSString * stockName;  

  3.     float price;  

  4. }  

  5. @end  

  6. @implementation StockData  

  7. @end  


2.定义此model为Controller的属性,实例化它,监听它的属性,并显示在当前的View里边

[cpp] view plaincopy

  1. - (void)viewDidLoad  

  2. {  

  3.     [super viewDidLoad];  

  4.   

  5.     stockForKVO = [[StockData alloc] init];  

  6.     [stockForKVO setValue:@"searph" forKey:@"stockName"];  

  7.     [stockForKVO setValue:@"10.0" forKey:@"price"];      

  8.     [stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];  

  9.   

  10.     myLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 30 )];  

  11.     myLabel.textColor = [UIColor redColor];  

  12.     myLabel.text = [stockForKVO valueForKey:@"price"];  

  13.     [self.view addSubview:myLabel];  

  14.      

  15.     UIButton * b = [UIButton buttonWithType:UIButtonTypeRoundedRect];  

  16.     b.frame = CGRectMake(0, 0, 100, 30);  

  17.     [b addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];  

  18.     [self.view addSubview:b];  

  19.   

  20. }  


3.当点击button的时候,调用buttonAction方法,修改对象的属性

[cpp] view plaincopy

  1. -(void) buttonAction  

  2. {  

  3.     [stockForKVO setValue:@"20.0" forKey:@"price"];  

  4. }  


4. 实现回调方法

[cpp] view plaincopy

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

  2. {  

  3.     if([keyPath isEqualToString:@"price"])  

  4.     {  

  5.         myLabel.text = [stockForKVO valueForKey:@"price"];  

  6.     }  

  7. }  


5.增加观察与取消观察是成对出现的,所以需要在最后的时候,移除观察者

[cpp] view plaincopy

  1. - (void)dealloc  

  2. {  

  3.     [super dealloc];  

  4.     [stockForKVO removeObserver:self forKeyPath:@"price"];  

  5.     [stockForKVO release];  

  6. }  


四,小结

KVO这种编码方式使用起来很简单,很适用与datamodel修改后,引发的UIVIew的变化这种情况,就像上边的例子那样,当更改属性的值后,监听对象会立即得到通知。


© 著作权归作者所有

lewis-180
粉丝 5
博文 40
码字总数 67621
作品 0
南宁
私信 提问
iOS源码补完计划--AFNetworking(二)

目录 前言 AFNetworkReachabilityManager.h AFNetworkReachabilityManager.m API注释Demo 参考资料 前言 AFNetworking源码第二篇 主要看了看AFNetworkReachabilityManager的内容 作为一个辅助...

kirito_song
2018/05/16
0
0
iOS高仿QQ侧滑控件、下载框架、动画效果、扫一扫、颜色变化、K线图等源码

iOS精选源码 仿京东"加入购物车"转场动画(http://www.code4app.com/thread-28162-1-1.html) ColorTool(颜色转换)(http://www.code4app.com/thread-29256-1-1.html) Swift 专业版K线(http://w......

sunnyaigd
2018/04/17
64
0
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课
2018/04/26
0
0
iOS Provisioning Portal概述

注意: iOS Provisioning Portal 仅可以在PC上的 Safari和Firefox浏览器中有效。 iOS Provisioning Portal概述 概述 和 provisioning(服务提供) 助手执行的自动设置不同, iOS Provisioning...

JohnZr
2012/09/26
25
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
9
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
9
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
9
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部