前言: oc中实现的kvo观察者模式比较呆板,不支持block,运用runtime机制将其进行实现。

详细实现步骤:

一:给NSObject添加分类(添加相应的添加观察者,删除观察者的方法),这样凡是继承NSObject的类生成的对象都会拥有这两个方法。

二:在添加观察者的方法中,检查本类是否有观察者想要观察的属性。如果有,进行下一步。

三:检查是否已经给该对象的这个属性的set方法进行了方法实现的替换,如果没有进行下一步,如有进行第五步。

四: 将这个属性的set方法的实现指向aop方法,并且添加一个相应的方法指向原有set方法的实现。

五:将观察者(可以是封装有观察者属性的对象,我就是封装了一个其他的类)添加到自己的字典中(我用的是一个字典,也可以是其他的模型) 。

六:书写aop方法,aop方法实现对原先set方法的调用, 并且实现对观察者的广播。(两个方法的调用顺序可以自定义,这就是aop前切和后切)

提示:

上述只是一个简单的流程步骤,留言提供源码,欢迎共同讨论学习。

转载于:https://www.cnblogs.com/Sunnyheart/p/4979287.html

运用runtime与AOP实现oc中的kvo相关推荐

  1. OC中Runtime浅析

    近期了解了一下OC的Runtime,真的是OC中非常强大的一个机制,看起来比較底层,但事实上能够有非常多活用的方式. 什么是Runtime 我们尽管是用Objective-C写的代码,事实上在运行过程 ...

  2. 5 OC 中的三种对象

    目录 OC 中对象的分类 一  instance 对象 二 类对象 三  元类对象 总结: OC 中对象的分类 instance 对象 类对象 元类对象 一  instance 对象 内存中包含哪些信 ...

  3. 4 OC 中的内存分配以及内存对齐

    目录 一  OC  中的内存分配 一  OC  中的内存分配 student 结构体明明是20?为什么是24个字节,因为结构体会按照本身成员变量最大的内存进行对齐,最大成员变量是8个字节,因此就是8的 ...

  4. iOS开发几年了,你清楚OC中的这些东西么!!!?

    iOS开发几年了,你清楚OC中的这些东西么!!!? 前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1 ...

  5. c语言访问oc变量,OC中的方法调用流程

    OC是一门动态语言,其方法调用方式与C++还是有很大区别的. 具体的方法调用过程,可以参考下面一片枫叶的博客,写的还是很详细的. 对于OC的方法调用,有两个点是重点: 1.对于OC的一切方法调用,最终 ...

  6. iOS底层探索二(OC 中 alloc 方法 初探)

    前言 相关文章: iOS底层探索一(底层探索方法) iOS底层探索三(内存对齐与calloc分析) iOS底层探索四(isa初探-联合体,位域,内存优化) iOS底层探索五(isa与类的关系) iOS ...

  7. OC中常见面试题汇整篇

    当页面跳转的时候,如何实现导航条和页面同时出现?因为他两个经常出现不同步的现象? 如何将tablview强制转换成UIScrollow? 当一个界面在6s上正好可以完全呈现,那在4s上面你是如何处理的 ...

  8. OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法

    一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化 ...

  9. 6 OC 中的isa 指针

    目录 一 isa 指针 二 类对象中的superclass 一 isa 指针 isa 指针 ,OC 中的对象都是有的 如下图所示,实例对象isa 指针指向 类对象,类对象的isa 指针指向 元类对象 ...

最新文章

  1. 排序算法—sort(),stable_sort(),merge()
  2. python pdf处理 图片_在Python中从PDF提取图像而无需重新采样?
  3. python教程5小时完整版_Python零基础入门教程5小时完整版(北京理工大2020年版)
  4. SSM+BJUI实现CRUD的报表功能
  5. C++中如何读取一个数的位数_求1000以内的水仙花数
  6. mfc绘制bezier b样条三种曲线_生存曲线(二):SPSS和Origin绘图教程及相关问题
  7. MyBatis之Mapper动态代理开发
  8. 人脸识别python face_recognize_python2.7使用face_recognition做人脸识别
  9. Intellj Idea 如何设置类头注释和方法注释
  10. 第10章 接口、继承与多态----对象类型的转换
  11. java 电子书下载
  12. python概率分析_请问如何通过Python做R*C列表的Fisher确切概率分析?
  13. VB利用SHFileOperation实现拷贝、删除、重命名文件
  14. Android Hybrid 方案之 离线文件加载
  15. 浏览器https证书存在错误怎么办?
  16. 北京CBD核心区有哪些值得加入的科技公司
  17. 手机号码归属地查询[免费]
  18. configure: error: libmpfr not found or uses a different ABI (including static vs shared)解决了
  19. elasticsearch-head设置登录用户和密码
  20. PYthon打印10000以内的所有素数

热门文章

  1. 机器学习 可视化_机器学习-可视化
  2. python 线性回归_Python中的简化线性回归
  3. Android wifi ADB的使用
  4. 大额存单20万起存,一次性存入40万能得到双倍利息吗?
  5. 拉5000万存款,银行客户经理能拿40万奖金?
  6. 常用音频软件:Wavesufer
  7. 故乡与文学:一场别开生面的跨年代文学对话(一)
  8. Ubuntu15.04如何添加163源
  9. easyui一行显示多行_easyui datagrid以及oracle中的多行合并一行
  10. gc java root_聊聊Java的GC机制