OC的KVO模式漫谈

QGis软件 —— 5、QGis增加线,并对线进行绘制、旋转、缩放、移动等基本操作 阅读详情

Key-Value Observing (简写为KVO):当指定的对象的属性被修改了,允许对象接受到通知的机制。每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。

     因为KVO模式本身获得了框架级别的支持,所以开发人员不需要自己设计观察者模式,不用添加额外的代码,使用方便。


KVO模式的工作原理: 

    如果A对象希望在B对象的一个特定属性改变时,获得通知消息,就需要使用 addObserver:forKeyPath:options:context进行注册。

    addObserver:forKeyPath:options:context:”方法在指定对象实例之间建立了一个连接。这个连接不是两个类之间建立的,而是两个对象实例之间建立的连接。

    同时,为了能够响应消息,对象A必须实现“observeValueForKeyPath:ofObject:change:context:”方法。这个方法实现如何响应变化的消息。在这个方法里面我们可以跟自己的情况,去实现应对被观察对象属性变动的相应逻辑。

   这样当对象B的特定属性改变时,就会回调对象A中observeValueForKeyPath:ofObject:change:context方法里面的逻辑, 实现了KVO模式过程。


示例代码如下:

    

- (void)viewDidLoad
{
    [super viewDidLoad];
	
    _label = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 50, 30)];
    
    _label.textAlignment = NSTextAlignmentCenter;
    _label.font = [UIFont systemFontOfSize:20];
    
    [self.view addSubview:_label];
    
    [self addObserver:self forKeyPath:@"textvalue" options:0 context:nil];  //注册

    [self setValue:[NSNumber numberWithInt:2] forKey:@"textvalue"];
}

// 监听回调
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"textvalue"]){
        
        NSNumber* num = [self valueForKey:@"textvalue"];
        
        _label.text = [NSString stringWithFormat:@"%d",[num integerValue]];
                 
    }
}

从苏宁电器到卡巴斯基(第二部)第14篇:我在卡巴的日子 XIV 目录 WannaCry 我的感慨 邻里矛盾 WannaCry 如果大家对于科技互联网圈子的新闻比较感兴趣的话,相信会对2017年5月的“WannaCry勒索病毒”事件记忆犹新,因为这个病毒在当时的全世界范围内掀起了极大的波澜,众多的企事业单位深受其害,造成的金钱和数据损失难以估量,从某种意义上来说,它甚至引领了勒索病毒新一轮的爆发浪潮。而通过这样的一次爆发,也让我对于卡巴斯基的技术实力有了更进一步的了解。 我记得很清楚,爆发的那天是周六,没记错的话Seth那天有事,就请假没来,只有我自己在公司值 阅读详情

相关推荐

KUKA机器人 - 从开机到自动运行

注1:本文仅代表本人对机器人使用的一些建议,在使用机器人前,还请详细阅读库卡机器人官方资料,道路千万条,安全第一条!!! 注2:技术有限,欢迎各位大大在阅读过程中发现各类问题,并且批评指正!!! 目录 一、准备工作 1. 机器人上电完成 2. 电脑安装Workvisual 二、学习手动移动机器人 三、项目配置 1. 设置机器人IP地址 2.电脑和机器人通过网线连接 3.查找并打开项目 4. 通讯配置 5. 项目上传 6. 检验IO配置 四、编程 1.新建程序 2. 程序...

yilunyao的博客 1万+

OC KVO学习

KVO       KVO 即 Key-Value Observing键值监听。可以将其直接理解为观察者模式。       例如,存在一个Person类和一个Account类分别代表一个人和一个银行账户,每当银行账户发生变化时,Person应当收到一个更改通知,知道自己账户变化。 // // ViewController.m // MyFirstApp // // Created

Ambrosedream的博客 336

OpenSSL玩转证书链:从Windows CA根证书到签发多域名/IP的服务器证书全攻略

本文详细介绍了如何使用OpenSSL在Windows环境下构建私有CA体系,从创建CA根证书到签发支持多域名/IP的服务器证书的全流程。通过实战指南,读者可以掌握零成本证书管理技术,灵活配置SAN扩展,并了解在Nginx、Apache等主流服务器中的证书部署方法,适用于企业内网、IoT设备等HTTPS加密场景。

weixin_28731223的博客 440

KVO 底层原理

KVO,全称为Key-Value observing,中文名为键值观察,KVO是一种机制,它允许将其他对象的指定属性的更改通知给对象。 在Key-Value Observing Programming Guide官方文档中,又这么一句话:理解KVO之前,必须先理解KVC(即KVO是基于KVC基础之上,KVO底层也是由KVC实现的) In order to understand key-value observing, you must first understand key-value coding. K

CRMEB小程序商城的博客 6184

Python爬虫实战:公共资源交易平台招标数据采集实战 - 从零构建企业情报系统(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 1288

iOS安全和逆向系列教程 第18篇:iOS应用脱壳技术详解与实战

iOS应用脱壳技术详解与实战 摘要: 本文深入剖析了iOS应用脱壳技术,首先解释了加壳(如FairPlay DRM)与脱壳的基本概念及必要性。通过otool命令可以检测应用的加密状态。文章详细介绍了三种主流脱壳工具:经典dumpdecrypted工具的使用方法、现代化Clutch工具的安装配置以及基于Frida的高级脱壳方案frida-ios-dump。针对特殊情况,还提供了使用LLDB手动dump内存的技术细节,包括查找基地址、计算dump范围和内存读取等操作。最后介绍了修复Mach-O文件头的Pytho

一个自学不成材的程序员 710

KVO实现原理和具体应用

一、什么是KVO?KVO(key-value observing)是Objective-C对观察者设计模式的一种实现。【另一种是:通知机制(notification),详情参考:iOS 趣谈设计模式——通知】;KVO提供一种机制,指定一个被观察的对象(A类),当对象某个属性(A中的属性name)发生更改时,对象会获得通知,并作出相应处理;【且不需要给被观察的对象添加任何额外代码,就能使用KVO机制...

陈荣科的博客 8870

一文吃透 SAP HANA Service Broker:原理、架构与落地实践

摘要:SAP HANA Service Broker 作为云原生开发的关键组件,通过标准化流程管理 HDI 容器与服务实例的生命周期,实现数据库资源的自动化配置与安全隔离。它采用服务目录、服务计划和绑定机制,将连接凭据注入应用环境变量,避免硬编码风险。在实际应用中,需根据模块生命周期决定共享或隔离容器,并通过跨容器访问模式实现安全数据共享。典型案例展示了电商平台的多模块协同与SaaS租户隔离场景,验证了其在提升运维效率与安全合规方面的价值。最佳实践强调以生命周期划边界、最小权限原则和HTTPS安全传输,为企

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

使用KVO键值监听

本文章从五个方面介绍KVO(Key-Value-Observer)键值观察者: (1)功能介绍 (2)使用步骤 (3)应用场景 (4)原理理解 (5)相关的面试题 一 功能介绍 KVO是OC语言对「观察者设计模式」的一种实现。 只要是NSObject的子类的实例对象,利用KVO机制可以监听该对象的指定属性的值,当属性值发生变化的时候,监听者就能获得通知,就能作出...

CCCCCC1990的博客 384

SAP DRC 是什么?一文读懂 SAP Document and Reporting Compliance 的定位、架构与落地案例

把视线拉长,会发现SAP DRC的价值并不仅是用来交差的工具。它更像是企业在全球化经营中建设的一套公共底座:既能以最低的重复成本去应对各国不断演进的监管要求,也能为财务数字化与供应链协同提供可信数据回路。依托本地与云的分层职责、与的生态联动、以及按国家不断更新的任务目录,企业可以将合规变成一种标准化、工程化、可持续运营的能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1651

ATECC508A芯片开发笔记(三):获取508A串号、随机数源码及I2C抓包分析

ATECC508A芯片开发笔记(三):读取508A串号、获取随机数源码及I2C抓包分析 APP层函数编写及源码分析 At508_GetSernum() GetSernum抓包记录 At508_GetRandom( ) GetRandom抓包记录 经过前两章节,CryptoAuthlib库已经成功适配在代码中了,下面简单测试一下API函数,并分析下I2C通讯流程: APP层函数编写及源码分析利用li

HowieXue 薛永浩的博客 2万+

【iOS】——KVC和KVO

key的值必须正确,如果拼写错误,会出现异常。当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来。因为类可以反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去。NSArray/NSSet等都支持KVC。可以通过KVC访问自定义类型的私有成员。

m0_73974920的博客 2613

Python爬虫实战:使用最新技术爬取新浪新闻首页数据

本文详细介绍了三种爬取新浪新闻首页的技术方案,从简单的requests-html到强大的Playwright,再到分布式Scrapy架构。小规模爬取:requests-html或aiohttp方案需要JavaScript渲染:Playwright方案大规模分布式爬取:Scrapy-Redis方案。

2201_76125261的博客 1243

【iOS KVO(上)实现过程】

利用runtime的API动态生成一个子类,并让实例对象的isa指向这个全新的子类当修改实例变量对象的属性时候,在全新子类的set方法中会调用Foundation的_NSSetXXXValueAndNotify函数调用原来的setter:内部会触发监听器的监听方法在调用的时候,会自动生成并注册一个该对象(被观察的对象)对应类的子类,取名NSKVONotify_Class,并且将该对象的isa指针指向这个新的类。

weixin_61639290的博客 1401

VC中sqlite的使用

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

OC对象 - KVO

利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类当修改instance对象的属性时,会调用Foundation的函数父类原来的setter内部会触发监听器(Oberser)的监听方法( observeValueForKeyPath:ofObject:change:context:)

sharp521的博客 1107

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

关于KVO的一些总结------已完结

关于KVO的一些总结

ACERROR 2650

iOS开发 - KVO原理及应用场景

KVO(Key-Value Observing)是一种iOS开发中常用的机制,用于监视对象属性的变化,当被观察的对象的属性发生变化时,它会自动通知观察者做出相应的响应。这样,当textObject的text属性发生变化时,观察者的observeValue函数就会被调用,更新UI。KVO的基本概念是:一个对象A监视另一个对象B的属性的变化,并在B的属性发生改变时,向A发送通知,A就可以做出相应的响应。这样,就可以使用KVO监听网络请求,当网络请求中的数据发生改变时,更新界面了。

weixin_38041747的博客 865

iOS底层原理之KVO本质

面试中常会问道: iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 如何手动触发KVO 什么是KVO 首先需要了解KVO基本使用,KVO的全称 Key-Value Observing,俗称“键值观察”,我们可以用于监听某个对象属性值的改变。 如下代码: // // ViewController.m // KVO原理探索 // Created by just so so o...

仰望星空的博客 661

iOS中的KVO(Key-Value Observing)详解

KVO(Key-Value Observing),即键值观察/监听,是苹果提供的一套事件通知机制。它允许一个对象(观察者)观察/监听另一个对象(被观察者)指定属性值的改变。当被观察对象的属性值发生变化时,KVO会自动触发监听方法来通知观察者。这种机制在MVC(Model-View-Controller)应用程序中的各层之间进行通信时特别有用,是实现观察者模式的一种重要方式。

jun778895的博客 1304

OC:跟随码哥一起学习KVO

当实例对象 Person 的 age 值发生变化,根据实例对象 isa 指针找到对应的类对象,然后调用对应类对象的方法。:KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。而对象添加KVO处理,肯定是在实现 setAge: 方法的时候,触发了监听器(Oberser)的监听方法。2.1、查看添加KVO时,类对象与元类对象的变化。3.1、未使用KVO监听的对象。3.2、使用了KVO监听的对象。2、调用原来的setter实现。2.3、对比两个类的对象方法。

2501_90256507的博客 1032

iOS开发中的KVO以及原理

KVO(Key-Value Observing)是iOS开发中的观察者模式实现,用于监听对象属性变化。其实现包含三个步骤:注册观察者、实现回调方法和移除观察者。KVO通过动态生成子类并重写setter方法实现,运用isa-swizzling技术将方法调用路由到新逻辑。使用时需注意及时移除观察者、线程安全和性能问题。在Swift中需使用@objc dynamic标记属性和对象。KVO的替代方案包括Combine框架、代理模式和Swift属性观察器(didSet/willSet)。

我叫柱子哥 1233

【iOS】KVO传值和Block传值

KVO全称Key Value Observing,是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的改变,并在改变时接收到事件。由于KVO的实现机制,只针对属性才会发生作用,一般继承自NSObject的对象都默认支持KVO。KVO可以监听单个属性的变化,也可以监听集合对象的变化。通过KVC的mutableArrayValueForKey:等方法获得代理对象,当代理对象的内部对象发生改变时,会回调KVO监听的方法。集合对象包含NSArray和NSSet。...

zdsey的博客 327

OC中的KVO

看官们,我们在前面章回中介绍了OC中的KVC,本章回中将介绍OC中的KVO。 我们说的KVO是Key Value Observing的缩写,它主要用来监听类属性的变化,它是在NSObject类中实现的,通常情况下我们定义的类只需要继承NSObject类就可以使用KVO来监听类属性的变化。下面是KVO的使用方法: 1.给属性注册监听器 - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)ke...

talk_8的专栏 623

KVO原理分析介绍

本文字数:5154字预计阅读时间:15分钟KVO原理分析介绍KVO全称KeyValueObserving,是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的改变,并在改变时...

SOHU_TECH的博客 2308

iOS中KVO的本质

提起KVO,相信很多同学都用过。我们可以用KVO监听对象属性值的改变,当属性值发生改变的时候,我们会在监听方法中得到被监听值的改变情况。 我们简单看一下KVO的使用: #import "ViewController.h" #import "Persion.h" @interface ViewController () @property (strong, nonatomic) Persion *...

IOSSHAN的博客 704

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

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

俊而不逊的博客 1577

OC - KVO实现原理

1.KVO简介   KVO是Objective-C对观察者设计模式的一种实现,它提供一种机制,指定一个被观察对象(如A类),当对象中的某个属性发生变化的时候,对象就会接收到通知,并作出相应的处理。在MVC设计架构下的项目,KVO机制很适合实现mode模型和view视图之间的通讯。例如:代码中,在模型类A创建属性数据,在控制器中创建观察者,一旦属性数据发生改变就收到观察者收到通知,通过KVO再在控...

weixin_30462049的博客 287
上一篇: Mac OS X的内核
下一篇: object c中 new和alloc区别
NewJerryj
博客等级 码龄19年 196粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值