KVC 和 KVO

一、KVC (Key-Value Coding) 键值编码

1.1 基本概念

KVC 是一种通过字符串键名间接访问对象属性的机制,而不是通过调用访问器方法。

1.2 核心方法

objectivec 复制代码
objective-c

// 设置值
- (void)setValue:(id)value forKey:(NSString *)key;
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;

// 获取值
- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;

二、KVO (Key-Value Observing) 键值观察

2.1 基本概念

KVO 允许对象监听另一个对象属性的变化,实现观察者模式。

2.2 基本使用

objectivec 复制代码
objective-c

// 1. 注册观察者
- (void)addObserver:(NSObject *)observer 
         forKeyPath:(NSString *)keyPath 
            options:(NSKeyValueObservingOptions)options 
            context:(void *)context;

// 2. 实现观察方法
- (void)observeValueForKeyPath:(NSString *)keyPath 
                      ofObject:(id)object 
                        change:(NSDictionary<NSKeyValueChangeKey,id> *)change 
                       context:(void *)context;

// 3. 移除观察者
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

总结

KVC 和 KVO 是 iOS 开发中强大的工具,但需要谨慎使用:

KVC 适用场景:

  • 动态访问属性

  • 字典与模型转换

  • 使用集合运算符进行数据聚合

KVO 适用场景:

  • 模型到视图的数据绑定

  • 观察配置变化

  • 监听对象状态改变

注意事项:

  1. 总是成对使用 add/remove Observer

  2. 注意线程安全问题

  3. 避免过度使用,考虑性能影响

  4. 在 Swift 中使用时注意 @objc dynamic 标记

相关推荐
VicLi11 小时前
把常用 iOS 调试操作放进一个 macOS 控制台: iCATBox
ios
茶底世界之下12 小时前
雾景需要更强反差吗?用 Awaking 检查树影与雾气的平衡
ios
终端安全笔记14 小时前
下一个大版本要动的三处:更新指令、传输要求、策略写法
网络安全·ios·1024程序员节·移动设备管理
法的空间16 小时前
AI 编程时代,为什么 Dart 分析会拖慢大型项目的开发
android·flutter·ios
season_zhu16 小时前
Skills For Real Engineers 系列之二:grill,把需求想清楚,也别把自己问进死胡同
ios·ai编程
美狐美颜SDK开放平台1 天前
准备开发直播APP?视频美颜SDK接入前的十项检查清单
android·ios·音视频·直播美颜sdk·视频美颜sdk
承渊政道2 天前
iOS远程控制电脑用什么好?iPhoneiPad远程控制Windows电脑最佳方案2026横评
windows·ios·远程控制·1024程序员节·iphone ipad
茶底世界之下2 天前
彩色建筑适合转黑白吗?用 Awaking 检查颜色消失后的层次
ios
黑科技iOS上架2 天前
App Store 26年10月新应用审核放缓大量应用不进审
ios·审核
OxYGC2 天前
手机为什么能“自动跳过“开屏广告?李跳跳、GKD 与 iOS 代理软件原理盘点
android·ios·开屏广告·广告屏蔽