iOS基础总结一(KVC、KVO简述)

iOS面试题库——KVC与KVO KVC与KVO 本文将会详解在面试中的常客——KVO实现的原理,在了解KVO之前我们要对KVC进行一个全面的了解,毕竟连官方文档都提到过: important: In order to understand key-value observing, you must first understand key-value coding. KVC KVC全称:Key-value c... 阅读详情

1.KVC实现原理

  • KVC,键值编码,使用字符串直接访问对象的属性;
  • 底层实现,当一 个对象调用setValue方法时,方法内部会做一下操作:

(1)检查是否存在相应key的set方法,如果存在,就调用set方法;

(2)如果set方法不存在,就会查找与key相同名称且带下划线的成员属性,如果有,则直接给成员属性赋值;

(3)如果没有找到_key,就会查找相同名称的属性key。如果有,就直接赋值;

(4)如果还没有找到,则会调用valueForUndefinedKey:和setValue:forUndefinedKey:方法

2.KVO的实现原理

KVO-键值观察机制,原理如下:

1、当给A类添加KVO的时候,runtime动态的生成了一个子类NSKVONotifying_A,让A类的isa指针指向NSKVONotifying_A类,重写 class方法,隐藏对象的真实类信息;

2、重写坚听属性的setter方法,在setter方法内部调用了Foundation的_NSSetObjectValueAndNotiify函数;

3、_NSSetObectValueAndNotify函数内部过程:

(a)首先会调用willChangeValueForKey;

(b)给属性赋值;

(c)调用diddChangeValueForKey;

(d)调用observer的observerValueForKeyPath去通知监听属性值发生了变化

4、重写dealloc,释放KVO 的内存

3.如何手动触发KVO方法

手动调用willChangeValueForKey 和didChangeValueForKey.

键值观察通知依赖于 NSObject 的两个方法: willChangeValueForKey: 和 didChangeValueForKey。在一个被观察属性发生改变之前, willChangeValueForKey: 一定会被调用,这就 会记录旧的值。而当改变发生后, didChangeValueForKey 会被调用,继而 observeValueForKey:ofObject:change:context: 也会被调用。如果可以手动实现这些调用,就可以实现“手动触发”了 有人可能会问只调用didChangeValueForKey方法可以触发KVO方法,其实是不能的,因为willChangeValueForKey: 记录旧的值,如果不记录旧的值,那就没有改变一说了

 

 

图像去雾常见数据集 上述数据集涵盖了室内、室外、真实和合成等多种场景,可以满足不同研究需求。在选择数据集时,建议根据具体任务的应用场景和目标选择合适的数据集,例如真实雾天图像适合模型的实际应用验证,而合成数据则适合模型的快速迭代和训练。希望本文能为从事图像去雾研究的朋友提供一些帮助! 阅读详情

相关推荐

LaTeX小白必看:TeX Live+TeXstudio保姆级安装教程(附清华镜像加速)

本文为LaTeX新手提供了一份详尽的TeX Live和TeXstudio安装指南。通过清华大学镜像站实现高速下载,并详细讲解了从下载、定制化安装到配置优化的每一步,帮助用户快速搭建稳定高效的本地LaTeX写作环境,轻松处理学术文档排版。

weixin_29214559的博客 413

【iOS KVO(上)实现过程】

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

weixin_61639290的博客 1401

海思Hi3061M MCU:为高速吹风筒市场注入智能动力

此外,海思还提供了丰富的软件开发工具和生态环境组件,帮助开发者快速实现复杂功能。高速吹风筒因其高效的风力和快速的干燥效果,近年来在市场上越来越受欢迎。然而,传统的高速吹风筒在性能、噪音和使用寿命等方面仍有改进的空间。凭借其高性能、低功耗、低噪声和易用的开发工具,为高速吹风筒市场带来了全新的解决方案。这不仅提高了用户的使用体验,还延长了电机的使用寿命。这不仅减少了电机的电磁噪声,还提高了电机的运行效率。还支持风机顺逆风启动适配多种电阻范围的电机,进一步提高了吹风筒的适用性和灵活性。

2401_83448585的博客 2016

关于iOS中的kvo错误 _NSSetObjectValueAndNotify

Foundation`_NSSetObjectValueAndNotify: ... 0x116156dfb <+27>: callq 0x116340498 ; symbol stub for: object_getClass 0x116156e00 <+32>: movq %rax, %rdi 0x1...

weixin_34315665的博客 552

VSCode连接SAP ABAP开发环境

本文介绍了使用VSCode连接ABAP开发环境的详细步骤。首先通过SICF或SMICM事务码获取ABAP连接地址,然后安装ABAP remote filesystem插件。提供了两种创建连接的方法:通过命令面板逐步配置(输入服务器地址、账号、系统标识等)或直接编辑JSON配置文件。最后通过命令面板选择已创建的连接即可完成连接,连接成功后可在VSCode左侧工作区查看ABAP系统内容进行开发。JSON配置方式更为简便推荐。整个流程帮助开发者摆脱复杂的Eclipse配置,实现快速便捷的ABAP开发环境搭建。

weixin_45293769的博客 2215

【2021末九软工边缘人保研】川大-中科院网络中心-华师夏令营+哈工大本-中科院网络中心-西交-厦大-中山-武大-北航预推免

2021末九软工边缘人保研记录一、写在前面二、个人背景 一、写在前面 2020年计算机保研可谓是诸神黄昏,卷的头破血流(指我等菜鸡)。疫情的原因,今年的夏令营和预推免基本全部改为线上,机试取消,能不能拿到offer基本完全取决于背景以及面试表现(当然也有个别头铁非要机试,甚至笔试的学校)。大佬们offer收割不停,我等边缘人只能看着一封封拒信发呆。 这种情况下,只有985 Rank5%以及211 Rank2%之前的大佬能够较为轻松地拿到面试入场券。贴一个上交电院夏令营要求你们感受一下: 预推免相比起夏令营

weixin_43222706的博客 4235

计算数字数组中元素的最值 & KVC用法延伸

计算数字数组中元素的最值 & KVC用法延伸 场景:计算一个数字数组的最大值和最小值。 原贴地址:http://stackoverflow.com/questions/15931112/finding-the-smallest-and-biggest-value-in-nsarray-of-nsnumbers 方法一:排序NSArray *sorted1 = [numbers sort

Cheny的博客 1566

微信小程序 实现拼图功能

微信小程序 实现碎片拼图

weixin_45689786的博客 2250

(译)KVO的内部实现

09年的一篇文章,比较深入地阐述了KVO的内部实现。 KVO是实现Cocoa Bindings的基础,它提供了一种方法,当某个属性改变时,相应的objects会被通知到。在其他语言中,这种观察者模式通常需要单独实现,而在Objective-C中,通常无须增加额外代码即可使用。 概览 这是怎么实现的呢?其实这都是通过Objective-C强大的运行时(runtime)实现的。当你第

wildfireli的专栏 1036

数据可视化—power bi 基础操作汇总

数据来源: https://pan.baidu.com/s/1U_Y7rKfhnSKbLmh4FcUD_Q 提取码: yq5v 目录 基本功能与视图 编辑与查询—修改column案例 建立关联性 新增column与DAX完成总价运算 习题练习1:建立可视化图表 产品销售统计图 column拖曳可视化 1.基本功能与视图 ①基础操作界面 ②获取数据—以打开excel为例 ③数据文件基本视图 可视化形式:柱状图、数据、关联性 2.编辑与查询—修改column ①编辑与查询—数据处理界面 .

weixin_52730784的博客 2682

Android11.0(R) MTK 平台开机logo动态替换(by logo.bin方式)

实现的效果 客户提供一张格式为 bmp 的开机logo,在 linux 环境下执行制作 logo.bin 脚本文件, apk 拷贝 logo.bin 文件替换系统原有的bin,然后重启 logo 自动更新。 原理分析 MTK 平台的充电图片和开机logo都是打包到 logo.bin 中的 对应的资源路径在源码 vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo 系统一般预制了很多分辨率文件夹,实际通过 BOOT_LOGO 来确定打包那一个

cczhengv 4586

[转](译)KVO的内部实现

转载自:http://www.cocoachina.com/applenews/devnews/2014/0107/7667.html 09年的一篇文章,比较深入地阐述了KVO的内部实现。 KVO是实现Cocoa Bindings的基础,它提供了一种方法,当某个属性改变时,相应的objects会被通知到。在其他语言中,这种观察者模式通常需要单独实现,而在Objective-C中,通...

weixin_30892987的博客 223

【AUTOSAR-IpduM】-3.1-配置一个发送Tx Dynamic Container PDU(Multiple-PDU)

手把手教您如何配置一个Tx Dynamic Container PDU(Multiple-PDU),动态容器复用帧。并附上测试LOG帮助您进一步加深理解。

「汽车电子助手」的博客 1770

iOS kvo kvc

Objective-C还支持一种更灵活的操作方式,这种方式允许以字符串形式间接操作对象的属性,这种方式的全称是(简称),即键值编码。无论是setValue:属性值forKey:还是valueForKey:属性名:,它们的实现逻辑都是差不多的:1.首先会从调用方法的类中寻找setter或getter方法,找到就调用,否则下一步2.然后从调用对象中找_name成员变量,找到赋值,否则下一步3.从调用对象中找name成员变量,找到赋值,否则下一步4.调用方法或。

m0_74217598的博客 1287

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

iOS 再谈KVC、 KVO

参考链接: https://www.jianshu.com/p/badf5cac0130

ws1836300的博客 1168

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【iOS开发】——KVO与KVC

iOS开发——KVO与KVC

weixin_51638861的博客 1926

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【iOS】KVC 和 KVO 的使用场景

Key Value Coding Key Value Coding是cocoa的一个标准组成部分,它能让我们可以通过name(key)的方式访问property, 不必调用明确的property accssor, 如我们有个property叫做foo, 我们可以foo直接访问它,同样我们也可以用KVC来完成[Object valueForKey:@“foo”], 有同学就会问了, 这样做有什

省 2万+

iOS底层原理——KVO和KVC

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

iOS0214227的博客 2397

iOS 中KVC、KVO、NSNotification、delegate 总结及区别

iOS 中KVC、KVO、NSNotification、delegate 总结及区别 1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。 Demo: @interface myPerson : NSObject { NSString*_name; int _age;

Eduora_meimei的专栏 3848

【iOS】—— KVO与KVC

KVC的全称是,俗称“键值编码”,可以通过一个key来访问某个属性;KVC提供了一种间接访问其属性方法或成员变量的机制,可以通过字符串来访问对应的属性方法或成员变量;它是一个非正式的Protocol,提供一种机制来间接访问对象的属性,而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。

qq_72437394的博客 1439

iOS KVC和KVO详解

KVC KVC定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。很多高级的iOS开发技巧都是基于KVC实现的。 在实现了访问器方法的类中,使用点语法和KVC访问...

wangletiancsdn的博客 409

iOS KVO和KVC介绍

iOS KVO和KVC介绍 KVO和KVC都是基于对NSObject的扩展来实现的,所有继承于NSObject的子类都能使用KVO和KVC。 用来测试的model: @interface User : NSObject @property (assign, nonatomic) NSInteger uid; @property (copy, nonatomic) NSString *name; @...

mingC0758的博客 690

iOS中KVO,KVC的学习记录

iOS中KVO,KVC的学习记录

woshiwls的专栏 1182

iOS基础---KVC vs KVO

Key-Value Coding (KVC) 是一种在 Objective-C 中通过字符串标识符(键)访问对象属性的机制。它是 Cocoa 的一部分,允许开发者通过键来获取或设置对象的属性,而不需要直接调用明确的访问器或修改器方法。

m0_61227789的博客 1270

【iOS】KVC 与 KVO 的基本了解与使用

在 iOS 开发中,我们常用 Block、Delegate、通知等方式进行数据传递,这些传值方式在我前面博客都予以介绍过【iOS】多界面传值(五大传值方式)KVC(键值编码)和KVO(键值观察)简单介绍的话就是KVC允许我们通过字符串(key)访问属性;KVO允许我们自动监听属性值的变化。它们一个负责“访问”,一个负责“观察”,是 Cocoa 动态机制的核心。Cocoa即objective-c框架体系,如UIKit,Foundation,Appkit等变量在运行时才确定其真实类型。

2401_86200358的博客 1033

ios 通过kvc修改属性会触发kvo_iOS开发-KVC和KVO的理解

KVC和KVO看起来很专业,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象的基本类型,那么键值对编码实际上和get,set方法没有区别,如果是属性是另外一个对象,那么发现KVC用起来还是非常顺手,KVO(key-value observing)是键值对的观察者模式,如果对象的属性发生变更,那么会触发observeValueForKeyPath事件...

weixin_39634194的博客 222
上一篇: 设计模式(一):单例模式
下一篇: iOS组件化简述
jgl357
博客等级 码龄10年 8粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值