关联对象

14、使用Category对类进行拓展的时候,只能添加方法,而不适合添加属性(可以添加属性,也可以正常使用get方法和set方法,只是不会自动生成以下划线开头命名的成员变量)。

可以通过关联对象(Associated Objects)来在Category里添加一个关联对象,然后将这个对象当做属性来看待使用,制造出“在Category中添加属性”的效果。

(1)、假设要在NSObject类的Category中添加一个关联对象,处理方法如下:

首先在@interface里照常添加属性associatedObject,然后在@implementation中,重写这个属性的set方法和get方法,在set方法里面使用objc_setAssociatedObject()函数关联上属性associatedObject,在get方法里使用objc_getAssociatedObject()函数获取属性associatedObject的值;

(2)、objc_setAssociatedObject()函数的4个参数分别是;关联的源对象、key、关联对象、关联方式。

key必须是一个唯一的常量,在上面的例子里使用了associatedObject这个方法的selector作为key,使用其他任何唯一的常量作为key也是可以的。

关联方式相当于属性的特性,所有的关联方式罗列如下:

objc_getAssociatedObject()函数的2个参数分别是:关联的源对象、key。

这个key必须和objc_setAssociatedObject()函数李的key一样,方能取出正确的值。

(3)、如上文一样为NSObject添加了一个关联属性后,执行以下代码:

输出如下:

等同于使用正常属性的效果。

方法交换(Method Swizzling

15、Method Swizzling可以在运行时将某个方法的实现替换成另一个方法的实现,这个技巧可以让你在不改动原方法的代码的前提下,对原方法的实现进行修改。

以下是一个在UIViewController类里交换了viewDidAppear:方法的例子。新建一个UIViewController类的分类(命名为Logging),然后在分类里重写+load方法,如下:

其中用来交换的方法命名为-swizzled_viewDidAppear:,定义如下:

交换函数swizzleMethod定义如下:

执行之后可以得到输出如下:

发现确实执行了我们自己定义的-swizzled_viewDidAppear:方法,说明已成功交换了两个方法的实现。

参考文档:

官方文档

https://github.com/samlaudev/RuntimeDemo

www.jianshu.com/p/25a319aee33d

转载于:https://www.cnblogs.com/shayneyeorg/p/5649265.html

格而知之8:我所理解的Runtime(3)相关推荐

  1. 格而知之11:我所理解的内存管理(2)

    6.ARC仍然遵循MRC的内存管理方式,4个基本规则在ARC下仍然是有效的,区别只在于:MRC模式下需要手动键入retain.release等方法来遵循这些规则,ARC环境下则是编译器自动在适当位置插 ...

  2. java多态知乎_Java多态的理解

    作者:程序狗 链接:https://www.zhihu.com/questio... 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不请自来,C++的多态不太清楚. ...

  3. 格基规约算法:数学基础

    本篇主要介绍学习格密码必备的格论知识,以下内容为理解格基规约算法必备的数学基础. 文章目录 欧氏空间 欧氏空间和范数 向量空间 欧氏空间 子空间的正交补 施密特正交化 格论基础 格的相关概念 格和格基 ...

  4. 日语基础语法(完整篇)格助词的固定用法篇

    格助词的固定用法 1,上车用に,下车用を./ /上下车辆.船只.飞机等时注意"上车用に,下车用を".这里に表示动作的着落点,を表示移动动词的起点.这里使用的动词主要有「乗る.乗り込 ...

  5. 谷歌开发者大会杀出技术黑马,知乎AI终于不再隐藏实力了

    上海最近几天比较 AI.世界人工智能大会八仙过海之后,2018 年谷歌开发者大会又来了.跟前者大开大合的产业趋势相比,谷歌的活动要接地气得多. 谷歌在中国的地气当然是开发者业务.从 2016 年中国开 ...

  6. jxls向右循环为什么会间隔单元格_VBA中单元格的Offset属性,你是否能灵活的利用呢?...

    大家好,我们今日继续讲解VBA代码解决方案的第122讲内容:如何在VBA中使用单元格Offset 属性.其实这讲的内容非常的简单,只是有很多的朋友要求再详细的讲一下,顺便再引申一下.谈到Offset属 ...

  7. 四类文法以及上下文有(无)关的理解【转】

    今天看到一篇挺好的关于编译原理四类文法解析的文章以及上下文有(无)关的回答,故此转载记录. 形式语言--四类文法 知乎:应该如何理解「上下文无关文法」? 首先先看知乎上,上下文无关文法的回到,我觉前两 ...

  8. 前沿重器[13] | 知乎query改写思路启示

    [前沿重器] 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 往期回顾 前沿重器[7] | ...

  9. Excel技能树系列02:公式中单元格的绝对引用、相对引用和混合引用

    这是Excel技能树系列的第二篇,正式开始Excel技能树知识的讲解了.如果对电子表格的起源和发展感兴趣,可以查看已经发布的Excel技能树系列01篇.本系列写给想要进阶的高频电子表格用户,本系列不适 ...

  10. AI作画:文心一格赋能艺术与设计创作

    针对视觉内容创作门槛高.耗时长等行业痛点问题,百度推出了基于文心大模型的AI艺术创作产品文心一格.通过文心一格核心系统的技术创新,让AI作画普惠大众,提升创作效率.目前,文心一格产品已经对外发布使用, ...

最新文章

  1. 死锁问题分析的利器——valgrind的DRD和Helgrind
  2. java全双工_TCP双向还是全双工?
  3. odata连接现有数据库
  4. 净利2.3万的香飘飘,还能做奶茶届的ZARA吗?
  5. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170402
  6. Linux下C程序的可扩展性.
  7. CentOS 初体验三: Yum 安装、卸载软件
  8. Python的国际化
  9. rsa 模数 指数转换 c语言_模数转换,你必须知道的8个经典ADC转换电路方案
  10. php本机绿色调试,php本地调试工具下载|
  11. 计算机网络实训室建设设备,计算机网络技术综合实训室建设方案.doc
  12. 抖音直播带货攻略;直播前需要准备哪些设备丨国仁网络资讯
  13. 三菱plc可以用c语言编程吗,三菱PLC高手进-c语言编程题库
  14. 软件需求文档模板及说明
  15. 稳定排序与不稳定排序
  16. mmc0: Too large timeout requested for CMD25
  17. Eureka入口之DiscoveryClient
  18. 自制BSL编程MSP430单片机
  19. man 命令指定section
  20. 生物信息数据格式:fasta格式

热门文章

  1. python编程从入门到实战1-3章
  2. Sublime Text 中配置 Eslint 代码检查和自动修复
  3. ListView嵌套ListView优化
  4. 关于getX()getY()就可以获取到位置,找不到方法问题
  5. 第一部分 第五章 数组 1102-1149
  6. Luogu2420 让我们异或吧
  7. BZOJ3156 防御准备
  8. nodejs后台系列--第四篇--koa(二)
  9. better-scroll使用的坑与心得
  10. Windows下MySQL的安装步骤(有图详解)