iOS 之KVO简介

iOS键值观察KVO实例详解 通过实例详细讲解iOS键值观察KVO的使用方法 阅读详情

一,概述

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

二,使用方法

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

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

2. 实现回调方法

3. 移除观察

三,实例:

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

1.定义DataModel,

[cpp]  view plain copy
  1. @interface StockData : NSObject {  
  2.     NSString * stockName;  
  3.     float price;  
  4. }  
  5. @end  
  6. @implementation StockData  
  7. @end  


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

[cpp]  view plain copy
  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 plain copy
  1. -(void) buttonAction  
  2. {  
  3.     [stockForKVO setValue:@"20.0" forKey:@"price"];  
  4. }  

4. 实现回调方法

[cpp]  view plain copy
  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 plain copy
  1. - (void)dealloc  
  2. {  
  3.     [super dealloc];  
  4.     [stockForKVO removeObserver:self forKeyPath:@"price"];  
  5.     [stockForKVO release];  
  6. }  

四,小结

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

iOS之深入解析KVO的底层原理 一、KVO 简介 ① 概念 KVO 全称 Key Value Observing,是苹果提供的一套事件通知机制,允许对象监听另一个对象特定属性的改变,并在改变时接收到事件。 由于 KVO 的实现机制,所以对属性才会发生作用,一般继承自 NSObject 的对象都默认支持 KVO。 KVO 和 NSNotificationCenter 都是 iOS 中观察者模式的一种实现,区别在于,相对于被观察者和观察者之间的关系,KVO 是一对一的,而 NSNotificationCenter 是一对多的,KVO 对被监 阅读详情

相关推荐

vivado 工程修改芯片型号

vivado工程芯片与实际板子不匹配时,需要修改工程的芯片型号,并对原工程的ip进行同步更新,之后生成新的bit文件,烧录到板子中

k7126685的博客 1万+

iOS-控制系统音量与屏幕亮度

iOS-控制系统音量与屏幕亮度

qq_43441647的博客 1091

FreeSWITCH实战:5分钟搞定阿里云SDM(MRCP-SERVER)语音机器人搭建(含Docker部署技巧)

本文详细介绍了如何利用FreeSWITCH与阿里云SDM(MRCP-SERVER)快速搭建高可用语音机器人,包括Docker部署技巧、系统调优及高可用架构设计。通过实战案例和优化建议,帮助开发者5分钟内完成部署,提升语音交互系统的性能和稳定性。

stone的博客 503

KVO例子

一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。 二,使用方法 系统框架已经支持KVO,所以程序员在使用的时候非常简单。 1. 注册,指定被观察者的属性, 2. 实现回调方法 3. 移除观察

chenxintao的专栏 858

杰理芯片外挂Flash音乐播放功能避坑指南(附FAT文件系统配置)

本文详细解析了杰理芯片外挂Flash实现音乐播放功能的技术要点与常见问题,包括硬件连接、SPI驱动配置、FAT文件系统烧录及音乐播放集成等关键环节。特别针对Flash选型、FAT文件系统配置等易错点提供实用解决方案,帮助开发者高效完成嵌入式音频系统开发。

yhn45678901的博客 833

(一)企业微信 - 会话内容存档

企业微信获取会话记录。

专打丶小豆豆的博客 2889

ios监听静音键和音量键事件

判断是否静音: viewplaincopytoclipboardprint? - (BOOL)isMuted   {       CFStringRef route;       UInt32 routeSize = sizeof(CFStringRef);          OSStatus status = AudioSessionGetProperty(

备忘录-IOS知识等 2502

2026软考中级-软件设计师笔记(送最新视频教程)

核心口诀:运控存输输(运算器、控制器、存储器、输入、输出)例题(2019年上半年):核心公式:数字签名流程:数字证书作用:死锁4个必要条件:死锁判断公式:处理策略:程序设计语言的四大核心成分:顺序表操作(时间复杂度):链表操作(时间复杂度):核心思想:频率高的字符用短编码,频率低的用长编码 → 最小化总编码长度构造步骤(贪心算法):前提:有序表(升序/降序) 步骤:时间复杂度:O(log₂n) 例:查找中核心思想:用哈希函数将关键字映射到存储位置 哈希冲突:不同关键字映射到同一位置 → 用链地址法或开放定址

36万+

ios 获取系统音量以及监听系统音量的设置

获取设备的音量: AVAudioSession *audioSession = [AVAudioSession sharedInstance]; CGFloat _systemVoluemValue = audioSession.outputVolume; 增加和删除监听设备音量的代码 添加设备音量的监听 [[NSNotificationCenter defaultC...

vickyjfr的专栏 2202

2篇1章1节:数据的基本概念以及 R 中的数据结构、向量与矩阵的创建及运算

本文详细介绍了R语言中常见的数据结构的向量和矩阵。通过掌握这些数据结构的基本概念和操作技巧,可以更高效地处理和分析数据。

MD Code 1243

Istio ICA考试之路---3-2

部署2个测试容器,分别是test和test2.test注入标签subset=v1。这里文档中省略了metadata的3行,可以从前面任意一个yaml复制粘贴过来。通过test2测试容器访问,50%概率触发500故障注入。通过test测试容器访问,20%概率触发延迟注入。发起20次请求,一共10次被500。

Q先生 725

IOS Object-c获取手机音量,设置手机音量

一.导入AVFoundation和MediaPlayer 二.导入头文件 //导入头文件 #import <AVFoundation/AVAudioSession.h> #import <MediaPlayer/MediaPlayer.h> 三.获取当前音量 在viewDidLoad里面获取 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) nam

moerduo0的博客 2388

2026年03月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《。订阅后可阅读专栏内所有文章。

人生就是一个不断学习的过程 337

iOS底层探索之KVO(一)—KVO简介

回顾 在iOS的面试中除了KVC是经常被问到的,还有KVO也是常问的,那么本篇博客就对KVO进行探索和分析下。 1. 什么是KVO KVO 是 Objective-C对观察者设计模式的一种实现。KVO提供一种机制,指定一个被观察对象(例如A类),当对象某个属性(例如A中的字符串name)发生更改时,对象会获得通知,并作出相应处理;【且不需要给被观察的对象添加任何额外代码,就能使用KVO机制】。 一般继承自NSObject的对象都默认支持KVO。KVO是响应式编程的代表。 苹果官方文档Key-Value O

俊而不逊的博客 1576

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ios kvo 简介

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34006965的博客 103

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS kvc和kvo简介

kvc和kvo简介

lvchao1122的博客 484

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

iOS开发中KVC、KVO简介

在iOS开发中,KVC和KVO是经常被用到的。可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化。简单介绍一下KVC和KVO。 一:键值编码(KVC) KVC,全称 Key Value Coding(键值编码),是OC 语言的一个特性,使用KVC,可以对对象的属性进行动态读写。 KVC的操作方法由 NSKeyValueCoding协议提供,而NSObject...

weixin_30246221的博客 86

iOS KVC和KVO简介

kvcKVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,它是一种可以直接通过字符串的名字(key)来访问类属性的机制(一种间接访问对象的属性的机制)。 常见的 获取值方法有:valueForKey://传入NSString属性的名字。 valueForKeyPath: //传入NSString属性的路径,xx.xx形式。 valueForUndefinedKey /

Mr_XiaoJie的博客 526

iOS开发笔记>> KVC 和 KVO 简介

首先来说下 KVC:  1.  KVC(key - value - coding)键值编码, 更多情况下会简化程序代码, 常见用法:  1) 给私有变量(该变量不对外开放)赋值: [Person setValue: @"19" ForKeyPath:@"age"] 2) 字典转模型: setValuesForKeyWithDictionary 3) 取出私有变量: [Person

晟楠 312

【iOS开发】——KVO传值

KVO的使用

weixin_50990189的博客 610

iOS开发中的常见设计模式

1.单例(Singleton):一个类只有一个实例 常见应用举例: UIApplication类提供了 +sharedAPplication方法创建和获取UIApplication单例NSBundle类提供了 +mainBunle方法获取NSBundle单例NSFileManager类提供了 +defaultManager方法创建和获得NSFileManager单例。(PS:有些时

ljnsb的博客 469

「iOS」——KVO

本文介绍了 iOS 中 KVO(键值观察)的底层原理和使用方法。KVO 是一种观察者模式实现,通过监听对象属性变化实现自动通知。详细讲解了 KVO 的注册、监听、移除等基本使用流程,深入分析了手动 KVO 的实现方式,包括关闭自动通知和手动触发通知。

2301_80253909的博客 1327

【iOS】KVO

类对象中保存着当前对象的实例方法,在向该对象发送消息的时候,实际上是发送到了派生类对象的方法。不一定触发instance实例对象的setter方法,但是该方法在修改成员变量的值的时候会调用。上述我们看了当注册观察者之后会生成一个中间类,那么当我们移除观察者之后,这里又会指回原本的类。这里要注意一点,当移除观察者之后,isa指针会指向原来的类,但是并不销毁中间类。,翻译为键值观察,这是一种机制,其允许其他对象的指定属性的更改通知给对象。,动态的修改当前实例对象的isa指针,使其指向派生类,并重写了。

2301_79847748的博客 1172

【iOS开发】—— KVO原理

主要用了isa-swizzling,修改了观察者的类信息,并且hooksetter方法,当setter方法调用时发送消息给所有观察者。由上面源码可以看出对观察者、被观察者的引用都是Not Retain, 所以对象释放前一定要移除观察者。

qq_72437394的博客 1104
上一篇: iOS 之视频压缩
下一篇: iOS 之KVC简介
Shicuf
博客等级 码龄16年 11粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值