k-v-o 扫盲

Xilinx Kintex-7系列XC7K410T-FFG900外设之DDR3硬件设计 基于K7+C665x为核心的电路板中用到了DDR3存储芯片,现将FPGA外接DDR3时硬件设计中的一些心得做一个简单的分享。 阅读详情

k-v-o 扫盲

 

对kvo/kvc做了简单的介绍,可作为入门读物。

有些术语描述不够精确请指正。

欢迎讨论。

Kvo是Cocoa的一个重要机制,他提供了观察某一属性变化的方法,极大的简化了代码。这种观察-被观察模型适用于这样的情况,比方说根据A(数据类)的某个属性值变化,B(view类)中的某个属性做出相应变化。对于推崇MVC的cocoa而言,kvo应用的地方非常广泛。(这样的机制听起来类似Notification,但是notification是需要一个发送notification的对象,一般是notificationCenter,来通知观察者。而kvo是直接通知到观察对象。)

适用kvo时,通常遵循如下流程:

1 注册:

-(void)addObserver:(NSObject *)anObserverforKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)optionscontext:(void *)context

keyPath就是要观察的属性值,options给你观察键值变化的选择,而context方便传输你需要的数据(注意这是一个void型)

2 实现变化方法:

-(void) observeValueForKeyPath:(NSString *)keyPathofObject:(id)object

change:(NSDictionary*)change context:(void *)context

change里存储了一些变化的数据,比如变化前的数据,变化后的数据;如果注册时context不为空,这里context就能接收到。

是不是很简单?kvo的逻辑非常清晰,实现步骤简单。

说了这么多,大家都要跃跃欲试了吧。可是,在此之前,我们还需要了解KVC机制。其实,知道了kvo的逻辑只是帮助你理解而已,要真正掌握的,不在于kvo的实现步骤是什么,而在于KVC,因为只有符合KVC标准的对象才能使用kvo(强烈推荐要使用kvo的人先理解KVC)。

KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor方法或是直接访问成员对象。

key就是确定对象某个值的字符串,它通常和accessor方法或是变量同名,并且必须以小写字母开头。Key path就是以“.”分隔的key,因为属性值也能包含属性。比如我们可以person这样的key,也可以有key.gender这样的key path。

获取属性值时可以通过valueForKey:的方法,设置属性值用setValue:forKey:。与此同时,KVC还对未定义的属性值定义了valueForUndefinedKey:,你可以重载以获取你要的实现(补充下,KVC定义载NSKeyValueCoding的非正式协议里)。

在O-C 2.0引入了property,我们也可以通过.运算符来访问属性。下面直接看个例子:

@property NSIntegernumber;

 

instance.number = 3;

[instancesetValue:[NSNumber numberWithInteger:3]forKey:@"number"];

注意KVC中的value都必须是对象。

以上介绍了通过KVC来获取/设置属性,接下来要说明下实现KVC的访问器方法(accessor method)。Apple给出的惯例通常是:

-key:,以及setKey:(使用的name convention和setter/getter命名一致)。对于未定义的属性可以用setNilValueForKey:。

至此,KVC的基本概念你应该已经掌握了。之所以是基本,因为只涉及到了单值情况,kvc还可以运用到对多关系,这里就不说了,留给各位自我学习的空间

接下来,我们要以集合为例,来对掌握的KVC进行一下实践。

之所以选择array,因为在ios中,array往往做为tableview的数据源,有这样的一种情况:

 假设我们已经有N条数据,在进行了某个操作后,有在原先的数据后多了2条记录;或者对N中的某些数据进行更新替换。不使用KVC我们可以使用reloadData方法或reloadRowsAtIndexPaths。前一种的弊端在于如果N很大消耗就很大。试想你只添加了几条数据却要重载之前N数据。后一种方法的不足在于代码会很冗余,你要一次计算各个indexPath再去reload,而且还要提前想好究竟在哪些情况下会引起数据更新,

倘若使用了KVC/kvo,这样的麻烦就迎刃而解了,你将不用关心追加或是更新多少条数据。

下面将以添加数据为例,说明需要实现的方法:

实现insertObject:inKeyAtIndex:或者insertKey:atIndexes。同时在kvo中我们可以通过change这个dictionary得知发生了哪种变化,从而进行相应的处理。


转自:http://www.cnblogs.com/scorpiozj/archive/2011/03/14/1983643.html


SWMM建模与案例应用 4、排水系统控制规则通过控制功能,可以在模拟进行过程中,通过条件判断,对闸门、水泵、管道、孔口、堰进行控制,实现排水系统实时控制。5、SWMM与其他模型对比分析分析:STORM、MOUSE、Info Works、SUSTAIN、SWC。1、模型初始设置主要参数:雨量计、汇水区、节点、出水口、管渠、分流器、蓄水池等参数前缀的设置。2、气象数据设置温度、蒸发、风速、融雪、面积亏损、气候调整、雨量计。1、多软件数据交互:CAD、Arcgis、SWMM。(1)节点、管段、水泵、孔口、堰、雨水口和街道。 阅读详情

相关推荐

C++中为什么要引入引用变量?

C++引用机制的设计哲学在于平衡性能与安全性。它解决了指针的三个痛点:语法噪音、空指针风险和语义模糊,同时保持了指针的效率优势。引用必须绑定有效对象且不可重绑定的特性增强了安全性,其值语义语法更直观。尤其在运算符重载和const引用场景中,引用展现了不可替代的优势。本质上,引用是编译器优化的指针实现,体现了C++"零开销抽象"的核心思想——既保持底层性能,又提供高级抽象。这种设计允许开发者根据场景灵活选择指针或引用,反映了C++多范式共存的语言智慧。

教学 & 技术专栏 174

PHP字符串解析漏洞实战:绕过WAF实现命令执行的CTF解题指南

在Web安全领域,PHP的字符串解析特性是一个经典且容易被忽视的漏洞点。其核心原理在于PHP在处理HTTP请求参数时,会将参数名中的空格、点号等特殊字符自动转换为下划线,这一特性可能导致安全检查与实际执行的变量不一致。从技术价值看,理解此原理有助于深入认识Web应用防火墙的绕过手法,提升代码审计中对输入验证逻辑的审视维度。在实际应用场景中,该漏洞常出现在对用户输入过滤不严的计算功能、参数校验等模块,攻击者可利用参数污染技术,构造特殊请求绕过常规的is_numeric等检查,进而实现命令执行或文件读取。本文以

weixin_33724570的博客 430

VQGAN实战:从文本到高清图像的保姆级生成教程(含PyTorch代码)

本文详细介绍了VQGAN(Vector Quantized Generative Adversarial Network)在文本到高清图像生成中的应用,提供了从环境配置到模型加载、文本编码及图像生成的完整PyTorch代码教程。通过实战案例和高级调优技巧,帮助开发者快速掌握VQGAN的核心技术,实现百万像素级的高清图像生成。

u8v9w0x1y的博客 649

LLM性能优化中的一些概念扫盲

MHA结构优化作者:tangwang原文:https://zhuanlan.zhihu.com/p/4525257731整理:青稞 AI。

具身机器人和通用AI 1319

SFR算法实现详解:从边缘检测到MTF计算的完整流程

本文详细解析了SFR算法从边缘检测到MTF计算的完整流程,包括边缘检测、ESF超采样、LSF差分等关键步骤。通过代码示例和实战经验,帮助开发者高效实现成像系统解析力评估,优化MTF测量精度。适用于摄像头模组调试、工业检测等场景。

Black的专栏 1009

F5高可用HA配置详情

F5 HA详细配置

weixin_45843944的博客 3022

PCIe扫盲(八)

相关的内容只会简单提及,并不会深入地介绍,有兴趣的可以阅读 PCIe Spec V3.0 或者 Mindshare 的相关书籍。总线采用了一种嵌入式时钟的机制,即发送端只向接收端发送数据信号,并不发送时钟信号(时钟信号隐藏在数据信号中)。设备(PCIe 卡和插槽等)都是按照统一的标准实现的,一般不会出现这种情况,因此这一功能是可选的。进行了简单的介绍,关于具体的每一个状态内部是如何实现的,请参考 PCIe Spec 相关章节。因为有的通道的信号可能先到达,有的可能后到达。

Liuqz2009的专栏 3108

dummy机械臂代码学习(六)

CLI-Tool文件夹下又包含四个子文件夹,以及一个gitignore文件、一个run_shell.py的python文件、一个run.bat文件和一个zadig exe文件。库解析命令行参数,并根据不同的命令执行相应的操作。Zadig是一个用于Windows操作系统的开源工具,它的主要功能是安装和配置USB驱动程序。的目的呢就是确保在版本控制过程中,不必要的或自动生成的文件被忽略掉,来保持代码仓库的干净和整洁。,DummyStudio的软件作者已放在GitHub,我们主要看CLI-Tool文件夹就行。

jumaohhh的博客 1432

电子扫盲之系统

电子扫盲,重点介绍Windows的基础操作

hacker_dx的博客 1589

YonSuite如何新增用户并分配角色角色授权图文教程

用友YonSuite产品基础教学

ct341688的博客 617

高频注入是否需要对齐和强拖操作?

高频注入技术显著优化了传统FOC启动流程,但仍需部分对齐操作。传统启动必须包含位置检测、对齐和强拖等步骤,而高频注入可实现零速闭环,简化或跳过部分环节。高频注入下的对齐主要用于验证有效性、初始化观测器和建立初始磁链,形式可大幅简化。虽然高频注入基本消除了传统强拖需求,但在重载、弱凸极等特殊情况下仍需辅助。实际应用中可采用自适应混合策略,根据负载和电机类型选择最优启动方案。高频注入使对齐和强拖从"必须"变为"可选优化项",是无传感器控制的重要进步。

汽车软件开发 204

大模型扫盲式面试知识复习 (一)

大模型面试知识全覆盖 sformer核心机制。Self-attention通过$Q$(查询意图)、$K$(索引属性)、$V$(承载信息)矩阵实现序列内部软寻址。$QK^T$除以$\sqrt{d_k}$稳定方差,防止梯度消失。主流LLM采用Decoder-only架构,因其训练(下一个词预测)与推理生成一致,且支持KV Cache提升效率。LayerNorm放置顺序影响训练:Pre-norm(先归一化后残差)梯度流动更顺畅,成为大模型稳定训练首选。RMSNorm是LayerNorm的高效变体

m0_37755875的博客 728

Adams Car——Adams car与Simulink联合仿真

Adams与simulink悬架联合仿真

Mr.邹的博客 2124

Labwindows扫盲+技巧贴,CVI学习必看

http://www.vihome.com.cn/bbs/viewthread.php?tid=4675 Labwindows扫盲+技巧贴,CVI学习必看 1.、CVI适合什么人使用? CVI是基于ANSI C的快速开发环境,适用于有C,C++基础。使用VB,VC,BC运用控件式组织用户界面的工程师。% s# E6 P; {8 X * w3 X$ e; {  P  m- y8 P5

C130大力神 2万+

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python 知识扫盲

v1 = 1 or 3 print(v1) v2 = 1 and 3 print(v2) v1 = 1 v2 = 3 or 具有截断效果,满足条件之后不会再匹配 v3 = 0 or False and 1 print(v3) v4 = False or 0 and 1] print(v4) v3 = False v4 = 0 False和0意义上是一样的,由于or的截断效果导致结果不一致 将字典按值的顺序排序 sorted(dic_items(), key=lambda x:x[1]) [(‘a’,

Monster_27的博客 367

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

linux性能分析命令-扫盲贴

好久没有写博客了,每天都过得诚惶诚恐,遂下定决心今天无论如何都要写一篇。这篇博客主要总结和罗列一下,linux一些常用的性能分析指标,算是个扫盲吧。一般来说Linux系统出现了性能问题,都会有专门的运维人员去检查,但是开发人员还是需要掌握一些基础的命令,比如可以通过top、iostat、vmstat、netstat、sar等命令来初步查看和定位问题。这些命令都比较基础,很多网站上都能找到,我学习的时

tonytfjing的专栏 3801

Qt扫盲-QPlainTextEdit理论总结

QPlainTextEdit是一个只支持纯文本的高级查看器/编辑器。它经过优化,可以处理大型文档,并快速响应用户输入。QPlainText使用与QTextEdit 非常相同的技术和概念,很多都一样,但针对纯文本处理进行了优化。更适合纯文本从处理。可以看看Qt扫盲-QTextEdit理论总结这个。QPlainTextEdit适用于段落和字符。段落是一个格式化的字符串,它被word包裹以适应widget的宽度。默认情况下,读取纯文本时,一个换行符表示一个段落。一个文档由零个或多个段落组成。

洪源兄 2185

NVME-oF IP 设计4 :设计扫盲2

本文介绍了NVMe协议的两个关键技术:Doorbell中断机制和多队列并行模型。Doorbell机制通过内存映射寄存器实现主机与控制器的同步,支持MSI-X中断和轮询方式降低延迟;多队列模型支持64K个I/O队列,每个队列64K命令,实现CPU核心级并行访问,避免锁竞争,提升SSD内部并行性。两者结合使NVMe成为高性能存储核心,尤其适用于NVMe-over-Fabrics等分布式场景。文末提供了B站性能演示视频链接。(149字)

tiantianuser的博客 195

linux裸设备、LVM扫盲

一:这部分是网上搜到的,扫盲,我的操作在第二部分。 1.创建pv pvcreate -M2 --metadatasize 100M /dev/sda pvcreate -M2 --metadatasize 100M /dev/sdb1 pvcreate -M2 --metadatasize 100M /dev/sdb2 pvcreate -M2 --metadatasize 100...

fedora 256

计算机扫盲之快捷键

本文提供了一份全面的计算机快捷键指南,涵盖Windows、macOS和Linux(GNOME/KDE)三大操作系统。内容按系统分类,包含系统管理、文件操作、截屏录屏等实用快捷键,并补充了跨平台通用的浏览器和文本编辑快捷键。Windows部分详细介绍了Win10/11的系统操作;macOS标注了符号对应键位;Linux则区分了GNOME和KDE环境。文章最后鼓励读者补充遗漏内容,并邀请分享常用快捷键和操作系统。这份指南适合不同系统的用户快速查找所需快捷键,提升操作效率。

雅典设计师的博客 571

【SoC FPGA学习】二、SoC FPGA硬件初探,基础扫盲

FPGA:现场可编程逻辑门阵列 编程语言:HDL(Verilog VHDL) FPGA - 高效并行执行 FPGA和ARM可以互补 Intel PSG(原ALTER) SOPC:(NIOS II + FPGA)通过Avalon MM 以及 Avalon ST总线进行通信 SOPC是使用FPGA做CPU SoC FPGA: 同一个芯片集成了FPGA和高性能的硬线逻辑固话的处理器 Cyclon...

悟已往之不谏 知来者之可追 7799
上一篇: GCD多线程之dispatch queue
下一篇: GCD之dispatch queue
drm521
博客等级 码龄14年 9粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值