运用runtime与AOP实现oc中的kvo
前言: 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相关推荐
- OC中Runtime浅析
近期了解了一下OC的Runtime,真的是OC中非常强大的一个机制,看起来比較底层,但事实上能够有非常多活用的方式. 什么是Runtime 我们尽管是用Objective-C写的代码,事实上在运行过程 ...
- 5 OC 中的三种对象
目录 OC 中对象的分类 一 instance 对象 二 类对象 三 元类对象 总结: OC 中对象的分类 instance 对象 类对象 元类对象 一 instance 对象 内存中包含哪些信 ...
- 4 OC 中的内存分配以及内存对齐
目录 一 OC 中的内存分配 一 OC 中的内存分配 student 结构体明明是20?为什么是24个字节,因为结构体会按照本身成员变量最大的内存进行对齐,最大成员变量是8个字节,因此就是8的 ...
- iOS开发几年了,你清楚OC中的这些东西么!!!?
iOS开发几年了,你清楚OC中的这些东西么!!!? 前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1 ...
- c语言访问oc变量,OC中的方法调用流程
OC是一门动态语言,其方法调用方式与C++还是有很大区别的. 具体的方法调用过程,可以参考下面一片枫叶的博客,写的还是很详细的. 对于OC的方法调用,有两个点是重点: 1.对于OC的一切方法调用,最终 ...
- iOS底层探索二(OC 中 alloc 方法 初探)
前言 相关文章: iOS底层探索一(底层探索方法) iOS底层探索三(内存对齐与calloc分析) iOS底层探索四(isa初探-联合体,位域,内存优化) iOS底层探索五(isa与类的关系) iOS ...
- OC中常见面试题汇整篇
当页面跳转的时候,如何实现导航条和页面同时出现?因为他两个经常出现不同步的现象? 如何将tablview强制转换成UIScrollow? 当一个界面在6s上正好可以完全呈现,那在4s上面你是如何处理的 ...
- OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法
一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化 ...
- 6 OC 中的isa 指针
目录 一 isa 指针 二 类对象中的superclass 一 isa 指针 isa 指针 ,OC 中的对象都是有的 如下图所示,实例对象isa 指针指向 类对象,类对象的isa 指针指向 元类对象 ...
最新文章
- 排序算法—sort(),stable_sort(),merge()
- python pdf处理 图片_在Python中从PDF提取图像而无需重新采样?
- python教程5小时完整版_Python零基础入门教程5小时完整版(北京理工大2020年版)
- SSM+BJUI实现CRUD的报表功能
- C++中如何读取一个数的位数_求1000以内的水仙花数
- mfc绘制bezier b样条三种曲线_生存曲线(二):SPSS和Origin绘图教程及相关问题
- MyBatis之Mapper动态代理开发
- 人脸识别python face_recognize_python2.7使用face_recognition做人脸识别
- Intellj Idea 如何设置类头注释和方法注释
- 第10章 接口、继承与多态----对象类型的转换
- java 电子书下载
- python概率分析_请问如何通过Python做R*C列表的Fisher确切概率分析?
- VB利用SHFileOperation实现拷贝、删除、重命名文件
- Android Hybrid 方案之 离线文件加载
- 浏览器https证书存在错误怎么办?
- 北京CBD核心区有哪些值得加入的科技公司
- 手机号码归属地查询[免费]
- configure: error: libmpfr not found or uses a different ABI (including static vs shared)解决了
- elasticsearch-head设置登录用户和密码
- PYthon打印10000以内的所有素数