美文网首页
iOS-KVO基本使用和底层实现原理

iOS-KVO基本使用和底层实现原理

作者: LWide | 来源:发表于2018-11-09 15:52 被阅读0次

KVO定义

KVO属于观察者模式,这种设计在很多地方都能用到,比如我们的响应式编程,代表框架RAC等.
键值观察是一种机制,当指定对象属性改变的时候允许另一对象接受通知.

KVO基本使用

使用KVO分为三个步骤:

  1. 通过addObserver: forKeyPath: options:context:方法添加观察者,观察者可以接受keyPath属性的变化事件.
  2. 在观察者中实现observeValueForKeyPath:ofObject: change: context:方法,当keyPath属性发生变化时,KVO会回调这个方法来通知观察者.
  3. 当观察者不需要监听时,可以调用removeObserver:forKeyPath:方法将KVO移除,需要注意的是,调用removeObserver需要在观察者消失之前,否则会导致Crash.
    代码如下图所示


    代码图.png
    002.png
003.png

KVO触发模式

KVO在属性发生改变时的调用是自动的,如果想手动控制这个调用时机,或者想自己实现KVO属性的调用,则可以通多KVO提供的方法进行调用.
废话不多说直接上代码!!

@implementation Person

+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
{
    return NO;
}

如果返回NO通知就不会被触发,系统默认是自动调用触发通知的.
注意:这里我们可以通过Key值来修改,否则整个类的属性都变成手动的了!!

+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
{
    if ([key isEqualToString:@"name"]) {
        return NO;
    }
    return YES;
}

运行!! 这个时候点击是没有反应的,需要我们手动的去触发.


手动触发.png

加上这两句就OK了,这样我们的选择机会更多,有的时候我们只有在特定条件下需要通知观察者对吧!!

KVO属性依赖

Snip20181108_8.png Snip20181108_10.png Snip20181108_11.png Snip20181108_12.png

这样我们就可以实现观察多个属性值了.

KVO原理探究

Snip20181109_1.png Snip20181109_2.png Snip20181109_3.png Snip20181109_4.png

自定义KVO

Snip20181109_5.png Snip20181109_6.png Snip20181109_7.png

这样就实现了自定义KVO.

KVO对容器类的监听

有时候我们需要对对象里面的数组或者其他容器类监听 我们需要怎么做呢
如下所示


Snip20181109_8.png Snip20181109_9.png Snip20181109_10.png

至此,我们已经完成KVO的基本使用,底层原理,自定义等内容,不足之处希望大佬指点,如果你感觉还不错,顺手点个赞,谢谢!
转载请注明出处!

相关文章

  • 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基本使用和底层实现原理

    KVO定义 KVO属于观察者模式,这种设计在很多地方都能用到,比如我们的响应式编程,代表框架RAC等.键值观察是一...

  • iOS-KVO 底层实现原理

    本问讲解的内容主要有以下方面:1.概述2.KVO的基本用法3.KVO的底层实现(主要) 1.概述KVO,即:Key...

  • 2018-08-08

    集合类的底层实现原理 1、ArrayList底层实现和原理 首先了解线性表、数组的概念。 线性表:最基本、最简单、...

  • JDK1.8关于HashMap的变化

    底层实现原理 ++1.7++HashMap底层是使用数组+链表实现 ++1.8++HashMap底层是使用数组+链...

  • 注解

    注解实现原理 底层使用反射实现。申明注解类需要加 @interface 注解类里只支持基本类型、String以及枚...

  • 【iOS重学】Category的底层原理

    写在前面 本文博主将从Category的基本使用和底层原理来窥探一下Runtime下的Category 是如何实现...

网友评论

      本文标题:iOS-KVO基本使用和底层实现原理

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