美文网首页
iOS Runtime之KVC

iOS Runtime之KVC

作者: 谢二九 | 来源:发表于2022-06-26 08:58 被阅读0次

Runtime系列导读

简介

KVC是Key Value Coding的缩写,意思是键值编码。 在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过getter/setter方法来访问对象的属性。 用KVC可以间接访问对象属性的机制。通常我们使用valueForKey 来替代getter 方法,setValue:forKey来代替setter方法。

用法

  • 常见API

    • - (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
    • - (void)setValue:(id)value forKey:(NSString *)key;
    • - (id)valueForKeyPath:(NSString *)keyPath;
    • - (id)valueForKey:(NSString *)key;
  • 调用方式

-(void)testKVO2
{
    self.test = [KVOTest new];
    
    [self.test setValue:@(10) forKey:@"age"];
    NSKeyValueObservingOptions option = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld;
    [self.test addObserver:self forKeyPath:@"age" options:option context:nil];
    [self.test setValue:@(20) forKey:@"age"];
    NSLog(@"%ld", [[self.test valueForKey:@"age"] integerValue]);
}
  • 打印日志
2022-06-25 22:25:06.887730+0800 StudyApp[31993:1358988] age - {
    kind = 1;
    new = 20;
    old = 10;
}
2022-06-25 22:25:06.887791+0800 StudyApp[31993:1358988] didChangeValueForKey:age,0x600001ce8470
2022-06-25 22:25:06.887835+0800 StudyApp[31993:1358988] 20

实现原理

网上对于这块的讲解比较多,我就不重复描述了,转载两个比较好描述该原理的流程图。

  • setValue:forKey:的原理
image.png
  • valueForKey:的原理
image.png

答疑

给不存在的属性赋值,会怎么样?

  • 会crash
[self.test setValue:@(10) forKey:@"age1"]; // 产生以下crash

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<KVOTest 0x600002ed45f0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key age1.'

给不存在的属性取值,会怎么样?

  • 会crash
[self.test valueForKey:@"age1"] // 产生以下Crash

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<KVOTest 0x6000033dc620> valueForUndefinedKey:]: this class is not key value coding-compliant for the key age1.'

相关文章

  • 面试题知识点梳理

    重点KVC、KVOGCDRuntime iOS开发之Runtime——面试解析runloopBlock iOS开发...

  • iOS Runtime之KVC

    Runtime系列导读 iOS Runtime之方法查找[https://www.jianshu.com/p/f6...

  • iOS runtime(三)runtime之method(1)m

    iOS runtime(一)runtime之Property 详尽iOS runtime(二)runtime之Iv...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • Runtime

    kyson老师 iOS开发之runtime(1):runtime调试环境搭建iOS开发之runtime(2):浅析...

  • iOS开发之Runtime常用示例总结

    iOS开发之Runtime常用示例总结 iOS开发之Runtime常用示例总结

  • 这些个技术要求

    iOS下的网络通信机制, 内存管理机制, GCD, Block, KVC, KVO, Runtime, Runlo...

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • Runtime专题

    参考资料 1、iOS Runtime详解 2、iOS runtime 之 Class 和 MetaClass 3、...

  • ios类私有属性的访问和修改

    对ios 类私有属性的访问和修改有两种方法: 一种方法是通过KVC进行处理, 一种就是Runtime KVC (使...

网友评论

      本文标题:iOS Runtime之KVC

      本文链接:https://www.haomeiwen.com/subject/bihwvrtx.html