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 标记

相关推荐
iceiceiceice21 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
ssshooter2 天前
Tauri 踩坑 appLink 修改后闪退
前端·ios·rust
二流小码农2 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
开心就好20253 天前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
开心就好20253 天前
免 Xcode 的 iOS 开发新选择?聊聊一款更轻量的 iOS 开发 IDE kxapp 快蝎
后端·ios
恋猫de小郭3 天前
Apple 的 ANE 被挖掘,AI 硬件公开,宣传的 38 TOPS 居然是"数字游戏"?
前端·人工智能·ios
忆江南4 天前
iOS 深度解析
flutter·ios
没有故事的Zhang同学4 天前
05-主题|事件响应者链@iOS-应用场景与进阶实践
ios
FeliksLv4 天前
尝试给Lookin 支持 MCP
ios
没有故事的Zhang同学4 天前
01-研究系统框架@Web@iOS | JavaScriptCore 框架:从使用到原理解析
ios