KVO的内部实现原理

Key-Value Observing (KVO)

首先我们先了解下 KVO 的机制,KVO:当指定的对象的属性被修改了,允许对象接收到通知的机制。

例如:

  [persion addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

只要当前类中 age 这个属性发生的变化都会触发到以下的方法

- (void)observeValueForKeyPath:(NSString *)keyPath
  ofObject:(id)object
  change:(NSDictionary *)change
  context:(void *)context

同时不要忘记在dealloc中移除监听

-(void)dealloc{

    [self.persion removeObserver:self forKeyPath:@"age"];

}

下面就来看看它的实现原理

 

通过上面图片可以看出 当某个类第一次被监听时,系统会在运行时期动态地创建一个继承XqPersion的NSKVONOtifying_XqPersion类

在这个派生类中,重写基类中任何被观察属性的setter方法,在setter方法中实现真正的通知机制.

在该类中重写了监听属性的set方法,来通知监听器

- (void)setAge:(int)age

{

  [super setAge:age];

  [坚听器  observeValueForKeyPath:@"age" ofObject:self change:@{} context:nil];

}

时间: 2024-07-31 15:10:26

KVO的内部实现原理的相关文章

iOS ---- KVO的内部实现原理

Key-Value Observing (KVO) KVO:当指定的对象的属性被修改了,允许对象接收到通知的机制.   [persion addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:nil]; 只要当前类中 age 这个属性发生的变化都会触发到以下的方法 - (void)observeValueForKeyPat

KVO内部实现原理

// // ViewController.m // KVO内部实现原理 // // Created by sw on 15/4/13. // Copyright © 2015年 sw. All rights reserved. // #import "ViewController.h" #import "Person.h" @interface ViewController () @end @implementation ViewController - (void

iOS 的 KVC & KVO的底层实现原理

KVO 内部实现原理 1. KVO 是基于runtime机制实现的. 2. 当某个类的对象第一次被观察时,系统就会在运行期动态的创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法; 派生类在被重写的setter方法中实现真正的通知机制 (Person -> NSKVONotifying_Person) 1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.

ArrayList内部实现原理

ArrayList内部实现原理 java list 首先,我们new一个对象list集合 List<String> list = new ArrayList<>(); 我们知道对象的创建离不开构造方法,因此我们查看ArrayList源码的时候先看其构造方法 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; transient Object[] elementData; // non-priva

LinkedList内部实现原理

LinkedList内部实现原理 java list 同ArrayList内部原理一样 我们先创建一个LinkedList对象LinkedList<String> li = new LinkedList<>();,然后查看其构造方法 transient Node<E> first; transient Node<E> last; public LinkedList() { } 比较尴尬的是在它的构造方法中什么也没有写.LinkedList的结构是**双向链表

Maven内部运行原理

原作者zlwen 原文链接 内部运行原理(二) maven至今还是Java编程语言构建的事实标准,大部分项目还在使用maven来进行构建,因此了解maven内部运行的原理对定位和分析问题还是很有裨益的.本篇文章主要介绍一些maven内部运行过程中的一些基本概念,相信看完后,对那么些刚刚接触maven的读者来说maven将不再陌生.??在具体分析项目构建的过程前,需要了解maven的一些基本概念,这些概念十分重要,请务必理解清楚后再看下文.基本概念主要有:POM,Lifecycle.这两个概念又会

关于SDWebimage的内部实现原理

SDWebimage的内部实现原理各路大神都已经剖析的很透彻了 我也来发一下希望大家共同讨论学习 1.入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片. 2.进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo: 交给 SDImageCache 从缓存查找图片是否已经下

利用反射模拟一个spring的内部工作原理

这个简单的案例是实行了登录和注册的功能,没有链接数据库. 在bean中id 是唯一的,id和name的区别在于id不能用特殊字符而name可以用特殊字符,比如:/-\.... 1 package com.obtk.reflect; 2 3 public class Logon { 4 /** 5 * 帐号密码长度大于六位字符就成功,否则失败! 6 * */ 7 public String select(String name, String pass) { 8 if (name.length()

前端必读:浏览器内部工作原理

前端必读:浏览器内部工作原理 作者: Tali Garsiel  发布时间: 2012-02-09 14:32  阅读: 56974 次  推荐: 88   原文链接   [收藏] 目录 一.介绍 二.渲染引擎 三.解析与DOM树构建 四.渲染树构建 五.布局 六.绘制 七.动态变化 八.渲染引擎的线程 九.CSS2可视模型 英文原文:How Browsers Work: Behind the Scenes of Modern Web Browsers 一.介绍 浏览器可以被认为是使用最广泛的软