iOS KVO模式

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析 本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。 阅读详情

KVO 键值观察机制,当某个对象特定的属性发生变化时能够通知到别的对象。这经常用于 model 和 controller 之间的通信,KVO主要的优点是你不需要在每次属性改变时手动去发送通知。并且它支持为一个属性注册多个观察者。
1.KVO实现机制的原理
KVO 的实现用了一种叫 isa-swizzling 的技术。isa 指针就是指向类的指针,当一个对象的一个属性注册了观察者后,被观察对象的isa指针就指向了一个系统为我们生成的中间类,而不是我们自己创建的类。在这个类中,系统为我们重写了被观察属性的setter方法。可以通过 object_getClass(id obj) 方法获得对象真实的类,在 addObserver 前后分别打印,就可以看到isa指针被指向了一个中间类。似乎都是在原来的类名前面加上 NSKVONotifying_*
isa指针不总是指向真实的类,所以你不应该依赖于 isa 指针来判断这个对象的类型,而应该通过 class 方法来判断对象的类型。

注册 KVO
(1)被观察对象 的属性必须是 KVO Compliant
(2)被观察的对象使用 addObserver:forKeyPath:options:context: 方法注册观察者
(3)观察者必须实现observeValueForKeyPath:ofObject:change:context: 方法

observer 参数是一个观察者对象
keyPath 表示要观察的属性,例如tableView的contentOffset属性
options 决定了提供给观察者change字典中的具体信息有哪些。(change字典是一个提供给观察者的参数,后面会提到)

NSKeyValueObservingOptionOld 表示在change字典中包含了改变前的值。
NSKeyValueObservingOptionNew 表示在change字典中包含新的值。
NSKeyValueObservingOptionInitial 在注册观察者的方法return的时候就会发出一次通知。
NSKeyValueObservingOptionPrior 会在值发生改变前发出一次通知,当然改变后的通知依旧还会发出,也就是每次change都会有两个通知。
context 这个参数可以是一个 C指针,也可以是一个 对象引用,它可以作为这个context的唯一标识,也可以提供一些数据给观察者,一般可以是nil。

属性变化时接收通知
注意:所有的观察者必须实现observeValueForKeyPath:ofObject:change:context: 方法。
当一个被观察属性的值发生改变时,观察者会收到 observeValueForKeyPath:ofObject:change:context: 的消息。。这个方法中的参数和注册观察者方法的参数基本相同,只有一个 change 不同。 change 是一个字典,它里面包含了的信息由注册时的 options 决定。

官方提供了这些key给我们来取到 change 中的value:

NSString *const NSKeyValueChangeKindKey;
NSString *const NSKeyValueChangeNewKey;
NSString *const NSKeyValueChangeOldKey;
NSString *const NSKeyValueChangeIndexesKey;
NSString *const NSKeyValueChangeNotificationIsPriorKey;
NSKeyValueChangeKindKey 这个key包含的value是一个 NSNumber 里面是一个 int,与之对应的是 NSKeyValueChange 的枚举

enum {
NSKeyValueChangeSetting = 1,
NSKeyValueChangeInsertion = 2,
NSKeyValueChangeRemoval = 3,
NSKeyValueChangeReplacement = 4
};
typedef NSUInteger NSKeyValueChange;
当 change[NSKeyValueChangeKindKey] 是 NSKeyValueChangeSetting 的时候,说明被观察属性的setter方法被调用了。

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖 本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。 阅读详情

相关推荐

WinForm制作文件传输助手,Tcp局域网传输文件,传输速度受限于宽带和硬盘速度上限

文件传输助手为什么会出现,是因为项目上有些特殊的地方限制太多了,连插硬盘都需要关软件,联网又要开很不方便,网络限制一般软件只能局域网通信,还要开特定的端口等,你才能在电脑上通信,这样和机房的服务器远程的时候文件就不好拿过去,又不可能每次都去开机房的门。现在这个功能比较简单,只能单文件发送,但是其实比U盘硬盘方便,一般的六类网线传输压缩包在50M/s以上,U盘硬盘复制就不行了,特别如果是像我们学校这种网络结构,一个学校都在一个局域网,那真的方便!普通的局域网用特定IP和端口,通信也是很方便的。

m0_69233031的博客 1671

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

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

jun778895的博客 1304

ADP在线自适应动态规划之持续激励条件

在线自适应动态规划之持续激励条件 在在线自适应动态规划算法中,需要通过满足持续激励条件(Persistent Excitation Condition)保证critic网络权值的收敛性,一般的做法都是在算法初期在输入端引入探测噪声(Probing Noises)来保证数据的丰富性,但是由于在输入端引入噪声会给系统带来一些不好的影响,甚至可能破坏系统的稳定性。因此,出现了一些其他的方法来避免引入探测噪声,受阅读所限,我目前了解两种: Concurrent Learning(CL) Experience Re

qq_43435956的博客 6161

iOS中KVO的本质

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

IOSSHAN的博客 704

手把手教你编写PCIe设备驱动:基于Linux内核的实战教程

本文详细介绍了基于Linux内核的PCIe设备驱动开发全流程,包括环境准备、设备探测、中断处理、DMA配置等核心内容。通过实战代码示例和Makefile编写指南,帮助开发者快速掌握PCIe驱动开发技术,实现高性能设备驱动开发与优化。

weixin_30687051的博客 193

Dell R730安装Windows Server 2008 R2

一、RAID驱动准备  在安装Windows server2008 R2操作系统时,如果没有发现硬盘,请将下面的阵列卡驱动先解压(在下载的.exe文件,双击点下一步会自动解压),解压后把那文件夹复制到U盘中。阵列卡 PERC9 H330 - H730 - H730P - H830 Controllers for Windows Server 2008 R2二、系统安装方法方法一:光盘安装  ①请您...

MarshLin 2万+

iOS中的KVO机制

这篇博客主要介绍KVO的用法。

我叫柱子哥 1749

工作之余的随想:AI 会终结 SAP 顾问吗?

本文是笔者工作之余的一些胡思乱想。昨晚(准确的说是今日凌晨),我又熬了一个夜。没办法,接到一个影响客户项目上线的紧急 incident,花了我好长时间,竟然一点头绪都没有。苦苦思索的过程,时间过得飞快。一转眼就晚上11:30 了。要说我 2007 年还在研三实习期间,就进入了 SAP 行业,到今天已经摸爬滚打 18 年了,按理说也算身经百战了,可以说处理过很多 SAP 客户使用系统时遇到的各种稀奇古怪的问题。但即便这样,我也时常在工作中遇到一开始感到无从下手的问题。

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

「iOS」——KVO

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

2301_80253909的博客 1327

【数据结构】期末考试复习(考点+例题)

1.线性表定义及其存储实现:顺序表和链接表,优缺点分析(顺序存储可随 机访问,链式存储可灵活利用空间),相关操作的时间复杂度。 2.链表的插入删除操作 3.两种特殊的线性表及其应用:栈、队列 4.栈、队列上的(插入/删除)操作及其特点 5.循环队列满和空的条件 6.能够定义线性表、栈、队列的数据存储结构,能够实现相关操作的算法并 分析时间复杂度(例如插入、删除及其它应用等) 7.理解线性结构的应用( 如根据要求能灵活定义线性表结构,能根据线性表 的插入、删除操作解决实际问题) 二叉树基本概念与性质(高

Molly 的博客 9366

【速通RAG实战:索引】4.RAG文档解析技术

通过本文技术方案,可构建高精准、高效率的文档解析流水线,为 RAG 应用提供坚实的知识底座。核心在于**格式解析的鲁棒性**和**语义分块的准确性**,后续通过持续的性能优化和质量监控,逐步提升索引质量和检索效率。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1545

iOS底层原理——KVO和KVC

一、KVO 1、概述 KVO的全称是KeyValueObserving,俗称“键值监听",可以用于监听某个对象属性值的改变; KVO是苹果提供的在套事件通知机制。KVO和NSNotificationCenter都是iOS中观察者模式的一种实现,区别是:NSNotificationCenter可以是一对多的关系,而KVO是一对一的; 2、KVO的使用 使用KVO分为三个步骤: 注册KVO监听 通过[addObserver:forKeyPath:options:context:]方法注册KVO,这样可以接收

iOS0214227的博客 2397

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IOS中KVO模式的解析与应用

【原】IOS中KVO模式的解析与应用

江湖两把刀的技术博客 1505

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

iOS中KVO模式的解析与应用

最近老翁在项目中多处用到了KVO,深感这种模式的好处。现总结如下: 一、概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。 KVO其实也是“观察者”设计模式的一种应用。我的看法是,这种模式有利于两个类间的解耦合,尤其是对于

dolacmeng的专栏 730

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

iOS 观察者模式之 KVO

知识点介绍 Key-Value Observing (简写为KVO):当指定的对象的属性被修改了,允许对象接受到通知的机制。每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。KVO的优点:当 有属性改变,KVO会提供自动的消息通知。这样的架构有很多好处。首先,开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知。这是KVO 机制提供的最大的...

aa4197435的博客 191

【原】IOS中KVO模式的解析与应用

最近老翁在项目中多处用到了KVO,深感这种模式的好处。现总结如下: 一、概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。 KVO其实也是“观察者”设计模式的一种应用。我的看法是,这种模式有利于两个类间的解耦合,尤其是对于业务逻辑与视图

飞翔的熊blabla 320

IOS-KVC,KVO与MVC设计模式

IOS-KVC,KVO与MVC设计模式IOS中的MVC开发KVC(键值编码) 简单介绍 KVC是Key Value Coding的缩写,意思是键值编码。 利用它我们可以通过类定义我们可以看到类的各种属性,那么使用属性的名称我们就能访问到类实例化后的对象的这个属性值。 这个方法可以不通过getter/setter方法来访问对象的属性(即使是私有变量也可以) 其实就是java

motionEnabled 754

iOS通讯模式(KVO、Notification、Delegate、Block、Target-Action的区别)

文章翻译自 https://www.objc.io/issues/7-foundation/communication-patterns/每个Application或多或少都有一些松耦合的对象(模块)组成,他们必须彼此通讯来完成工作。这篇文章将会通过可用的通讯机制,并以Apple的Framework来举例,并给出最佳的实践建议关于使用哪种通讯机制。虽然这个问题是关于Foundation框架的,但是我

csx66406602的博客 580

ios 通过kvc修改属性会触发kvo_IOS 设计模式-观察者模式,代理模式,MVC模式,单例模式,策略模式,工厂模式,MVVM模式...

一.观察者模式,实现:通知和KVO 触发机制: 一个对象(观察者),观察另一个对象(被观察者)的某属性(对象属性或者基本类型属性)是否发生变化,若被观察的属性发生了更改,会触发回调函数。 使用步骤: 1.注册观察者(为被观察者指定观察者以及被观察的属性)。 [被观察者 addObserver:观察者 forKeyPath:观察属...

weixin_39588084的博客 115

IOS观察者模式_NSNotification,KVO,Delegate的使用理解

个人对IOS观察者模式的理解,

狮子座的男人 1037

iOS开发之MVC设计模式 KVO模式 KVC模式 单例模式

MVC设计模式 模型-视图-控制器(Model-View-Controller,MVC),是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程序中。在iOS开发中MVC的机制被使用的淋漓尽致,充分理解iOS的MVC模式,有助于我们程序的组织合理性。 model_view_controller

shiningchen322的博客 615

iOS KVO模式简解

KVO模式 - 什么是KVO?KVO是Key-Value Observing的简称,翻译成中文就是键值观察实现机制为,为可能改变的数据增加一个观察者,在上面的说法中这个观察者就是controller,它去观察这个数据有没有发生变化,一旦发生变化,就会得到一个信号**实现步骤:**第一步:设置键值对即–K–V–第二步:为controller添加观察者,用于观察键值对变化第三步:延迟一秒执行,改变age

Quinn's blog ! I'm glad to be here! 566
上一篇: 极光推送正式环境收不到推送消息
下一篇: Mac nginx运行遇到的错误
rubyRock
博客等级 码龄10年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值