KVC 底层原理详解
KVC 其实就是键值编码
1、赋值其实就两个方法
- setValue: forKey 给对象的某个属性值赋值
-
setValue:forKeyPath
给对象的某个属性中的属性赋值
2、获取值其实也是两个方法
-
valueForKey 获取对象的某个属性值
-
valueForKeyPath 获取对象的某个属性中的属性值
@interface Cat : NSObject @property (nonatomic,copy) NSString *name; @end @interface Person : NSObject @property (nonatomic,assign) int age; @property (nonatomic, strong) Cat *cat; @end self.p=[[Person alloc]init]; Cat *cat=[[Cat alloc]init]; self.p.cat=cat; [self.p setValue:@12 forKey:@"age"]; [self.p setValue:@"猪" forKeyPath:@"cat.name"]; NSLog(@"--%d--%@",self.p.age,self.p.cat.name);//--12--猪 NSLog(@"--%@--%@",[self.p valueForKey:@"age"],[self.p valueForKeyPath:@"cat.name"]);//--12--猪
3、setValue:forKey:的原理
4、valueForKey:的原理
self.p=[[Person alloc]init]; [self.p setValue:@12 forKey:@"age"]; #import "Person.h" @implementation Person -(void)setAge:(int)age{ NSLog(@"1"); } -(void)_setAge:(int)age{ NSLog(@"2"); } @end @interface Person : NSObject { int _age; int _isAge; int age; int isAge; } @end
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
@implementation Person -(int)getAge{ return 1; } -(int)age{ return 2; } -(int)isAge{ return 3; } -(int)_age{ return 4; } @end .h @interface Person : NSObject { int _age; int _isAge; int age; int isAge; }
分类:
底层相关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构