KVC, KVO
KVC (Key-Value Coding)键值编码。
即是NSKeyValueCoding 一个非正式的Protocol,提供了一种间接访问对象属性的机制。
作用:设置属性值
1 [self setValue:@"" forKey:@""]; 2 //可以通过点语法来赋值(跨层级) 3 [self setValue:@"" forKeyPath:@"key.key"];
获取属性值
1 [self valueForKey:@""]; 2 /// 获取属性值,可以跨层级获取 3 [self valueForKeyPath:@"key.key"];
将字典转化为模型
1 //用字典对实例进行赋值 2 [p setValuesForKeysWithDictionary:dic]; 3 // 在model要实现的方法。 4 - (void)setValue:(id)value forUndefinedKey:(NSString *)key { 5 //外部没有定义的属性。不实现的话,遇到外部没有定义的Key会Crash 6 }
KVO(Key-Value Observing)键值观察者
KVO建立在KVC之上,他能够观察一个对象的KVC Key Path的值的变化。
原理:在注册观察者时,系统会在运行时生成一个派生类,派生类重写了该对象的setter方法,并且在setter方法中实现了通知机制。同时派生类重写了class方法,以欺骗外部调用者,系统将该类的isa指针指向派生类,因此该对象就是派生类的新对象了,因此会调用该对象的setter就相当于调用派生类的setter,从而激活键值通知机制。还重写了dealloc方法来释放资源。
主要使用的是三个方法
/// 添加观察者 - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context; /// 监听到值改变 - (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary<NSKeyValueChangeKey, id> *)change context:(nullable void *)context; /// 移除观察者,便面内存泄漏 - (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix