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

相关推荐
游戏开发爱好者85 小时前
Linux 自动上传 App Store Connect:把 IPA 上传流程接进CI工作流
linux·运维·ios·ci/cd·小程序·uni-app·iphone
白玉cfc5 小时前
【iOS】底层原理:方法交换
macos·ios·cocoa
暗冰ཏོ6 小时前
2026 App 开发完整指南:Android、iOS、跨平台开发与安卓应用上线全流程
android·ios·uni-app·web app·app开发
人月神话-Lee1 天前
【图像处理】图像直方图——从“频率分布“到“智能决策“
图像处理·人工智能·ios·ai编程·swift
会Tk矩阵群控的小木1 天前
imessage虚拟机群发系统搭建:基于UTM+Frida的完整实现与海外社媒集成
macos·ios·objective-c·cocoa·开源软件·个人开发·tk矩阵
灰鲸广告联盟1 天前
新老用户广告价值不同?差异化策略如何实现收益最大化
android·开发语言·flutter·ios
壹方秘境1 天前
iOS抓包新选择:ApiCatcher同时支持捕获HTTP(s)和WebSocket(s)协议数据包
websocket·ios·api
2501_915918411 天前
Python如何抓取HTTPS请求包的完整教程与代码示例
android·ios·小程序·https·uni-app·iphone·webview
linweidong1 天前
iOS 开发面试 50 个高频易混淆知识点详解
ios·设计模式·面试·cocoa·uikit·uiview·uistackview