美文网首页程序员
iOS KVO的基本使用点

iOS KVO的基本使用点

作者: wp_Demo | 来源:发表于2019-01-14 15:35 被阅读0次
  1. 如果监听的是值类型的话,在打印change的时候changer对一个的kind是1,如果是集合类型或者数组,那么kind对应的是2
typedef NS_ENUM(NSUInteger, NSKeyValueChange) {
    NSKeyValueChangeSetting = 1,
    NSKeyValueChangeInsertion = 2,
    NSKeyValueChangeRemoval = 3,
    NSKeyValueChangeReplacement = 4,
};
Mark :注意:监听数组的时候,如果直接用addObject是没有作用的得用:
    [[self.person mutableArrayValueForKey:@"array"] addObject:@"1"];

2 .移除和添加观察者要一一对应否则会造成崩溃.

  1. 绑定监听关系,场景:一个属性的改变,会导致另外一个属性的改变,比如我们有个person类,她有三个属性,然而fullName是由lastName和firstName拼接成的:
@property (nonatomic,copy)NSString *fullName;
@property (nonatomic,copy)NSString *firstName;
@property (nonatomic,copy)NSString *lastName;
+(NSSet<NSString *> *)keyPathsForValuesAffectingFullName
{
    return [NSSet setWithObjects:@"lastName",@"firstName", nil];
}

当我们监听fullName的时候:

    [self.person addObserver:self forKeyPath:@"fullName" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior context:nil];

当修改firstName的值,就会走到系统的observeValueForKeyPath方法

2019-01-14 14:43:53.860862+0800 KVO_learn[33511:363993] {
kind = 1;
notificationIsPrior = 1;
old = "(null)(null)";
}
2019-01-14 14:43:53.861199+0800 KVO_learn[33511:363993] {
kind = 1;
new = "san(null)";
old = "(null)(null)";
}

  1. automaticallyNotifiesObserversOf<key>类方法,系统默认返回YES,但是我们可以重写为NO:
+ (BOOL)automaticallyNotifiesObserversOfFullName{
    return NO;
}

此时监听的方法会失效,我们需要手动发送通知告诉系统:

    [self.person willChangeValueForKey:@"firstName"];
    self.person.firstName = @"san";
    [self.person didChangeValueForKey:@"firstName"];

需要注意的是,此时observeValueForKeyPath会收到四次通知了,如果我们options为NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior

相关文章

  • iOS-KVO(二) 使用注意点

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(三) 窥探底层实现

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(四) 自定义KVO+Block

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(一) 基本操作

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS KVO的基本使用点

    如果监听的是值类型的话,在打印change的时候changer对一个的kind是1,如果是集合类型或者数组,那么k...

  • iOS底层原理总结 - 探寻KVO本质

    问题iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO 首先需要了解KVO基本使用...

  • KVO

    基本使用 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)KVO的全称是Key-Value Obs...

  • iOS开发-底层原理 - KVO

    问题:iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO? 一.基本使用 概念:K...

  • iOS KVO的基本使用

    KVO : (Key - Value - Observer) 键值观察者,是观察者设计模式的一种具体实现(C层和M...

  • KVO基本使用

    分三部分解释KVO一.KVO基本使用二.KVO原理解析三.自定义实现KVO 一、KVO基本使用 使用KVO,能够非...

网友评论

    本文标题:iOS KVO的基本使用点

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