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

相关推荐
harder32112 小时前
Swift 面向协议编程的 RMP 模式
开发语言·ios·mvc·swift·策略模式
leluckys13 小时前
Jenkins CI/CD 持续集成专题十二、iOS-Jenkins自动化打包集成
ios·ci/cd·jenkins
leluckys13 小时前
Jenkins CI/CD 持续集成专题八- jenkins 之 iOS 打包及上传至蒲公英
ios·ci/cd·jenkins
leluckys13 小时前
Jenkins CI/CD 持续集成专题十一、jenkins打包ios脚本证书
ios·ci/cd·jenkins
leluckys13 小时前
Jenkins CI/CD 持续集成专题十-jenkins 可以通过api 打ios包
ios·ci/cd·jenkins
壹方秘境13 小时前
作为开发者,我们需要的可能不是Wireshark那样的数据包分析工具,也不是Stream、ProxyPin那样的抓包工具
后端·ios
和沐阳学逆向1 天前
iOS逆向_古法逆向_Instagram最新版抓包
macos·ios·cocoa
Digitally1 天前
如何将真我(realme)手机数据传输至 iPhone
ios·智能手机·iphone
JFSJHFZJ1 天前
解密iPhone核心技术,读懂苹果的硬实力
ios·cocoa·iphone
JXSJHF2 天前
iPhone隐藏功能大盘点,免费好用不占内存
ios·iphone