美文网首页
问题:什么是KVC/KVO

问题:什么是KVC/KVO

作者: 姜小舟 | 来源:发表于2020-05-11 12:48 被阅读0次
  • KVC:键值编码机制

NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性,并不需要调用setter/getter函数或者类的实例变量。

-----------------------------------------
#ClassB.h文件 不声明暴露属性
@interface ClassB : NSObject
@end
-----------------------------------------
#ClassB.m文件 声明属性
#import "ClassB.h"

@interface ClassB()
@property (nonatomic,assign) NSInteger age;
@end

@implementation ClassB
@end
-----------------------------------------
-----------------------------------------
#ClassC.h文件 不声明暴露属性你
@interface ClassC : NSObject
@end
-----------------------------------------
#ClassC.m文件 声明属性
#import "ClassC.h"
#import "ClassB.h"

@interface ClassC()
@property (nonatomic,copy) NSString *str;
@property (nonatomic,assign) NSInteger num;
@property (nonatomic, strong) NSArray * array;
@property (nonatomic, strong) ClassB * b;
@end

@implementation ClassC
@end
-----------------------------------------

理论上来说,外部是访问不到ClassC.m的3个私有变量的,但KVC的强大之处就显示出来了,具体应用如下:

ClassC *a = [[ClassC alloc] init];

//KVC之set
[a setValue:@"HelloWorld" forKey:@"str"];
[a setValue:@2015 forKey:@"num"];
[a setValue:@[@"HearthStone", @2] forKey:@"array"];
[a setValue:@23 forKeyPath:@"b.age"];

//KVC之get
NSString *str = [a valueForKey:@"str"];
NSInteger value = [[a valueForKey:@"value"] integerValue];  //id 转为 NSInteger
NSArray *array = [a valueForKey:@"array"];
NSInteger age = [[a valueForKey:@"b.age"] integerValue];  //id 转为 NSInteger

NSLog(@"\n%@\n%ld\n%@\n%ld", str, (long)value, array, age);
/*打印结果:
HelloWorld
2015
(
HearthStone,
2
)
23
*/
  • KVO:键值观察机制

NSKeyValueObserving,一个非正式的Protocol,提供一种机制来间接观察其他对象属性的变化。

#添加观察对象 
[_scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
 
#实现监听方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"contentOffset"])
    {
        NSLog(@"%@", change);
    }
}

#移除监听对象
- (void)dealloc {
    [_scrollView removeObserver:self forKeyPath:@"contentOffset"];
}

相关文章

  • ios基础——KVO、KVC

    KVO和KVC常见问题: 1.KVC和KVO是什么.2.KVC和KVO的原理是什么3.KVC和KVO的使用场景4....

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

  • IOS KVC与KVO理解

    目录 1 什么是KVO KVC 2 KVC与KVO能实现什么? 什么是KVO与KVC? 首先我们看下官方文档解释是...

  • iOS-KVC和KVO

    重新整理一波KVO和KVC. 抛出几个常见问题 : 1.KVC和KVO是什么.2.KVC和KVO的原理是什么3.K...

  • 问题:什么是KVC/KVO

    KVC:键值编码机制 即 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问...

  • iOS中的KVC与KVO,NSNotification通知

    问题: 什么是键值编码KVC,键路径是什么? 什么是键值观察KVO? 键值编码KVC: 键值编码是一种在NSKey...

  • KVC内部原理?KVC和KVO关系?

    KVC都不陌生,多多少少都用过,那么KVC内部原理是怎样的?KVC和KVO什么关系?使用KVC赋值会触发KVO吗?...

  • KVO&KVC浅谈

    在谈论KVO和KVC之前,先引出几个问题 问题一:iOS用什么方式实现KVO,你可以理解成KVO本质是什么? 1....

  • KVC、KVO

    KVC、KVO探识(一)KVO和KVO的详细使用 KVC、KVO探识(二)KVC你不知道的东西 KVC、KVO探识...

  • KVC,KVO

    KVC , KVO KVC和KVO的区别及应用 KVC/KVO原理 1. KVC键值编码 KVC,即是指NSKey...

网友评论

      本文标题:问题:什么是KVC/KVO

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