runtime理解

rutime

runtime:运行时,是一套底层的C语言API,包含很多强大实用的C语言数据类型和C语言函数

1.常用的头文件#import <objc/runtime.h> 包含对类、成员变量、属性、方法的操作#import <objc/message.h> 包含消息机制2.常用方法
class_copyIvarList()返回一个指向类的成员变量数组的指针
class_copyPropertyList()返回一个指向类的属性数组的指针

10、关联

使用关联,我们可以不用修改类的定义而为其对象增加存储空间。关联是可以保证被关联的对象在关联对象的整个生命周期都是可用的(在垃圾自动回收环境下也不会导致资源不可回收)。(避免被释放掉)

用objc_setAssociatedObject来把一个对象与另外一个对象进行关联。该函数需要四个参数:源对象,关键字,关联的对象和一个关联策略

关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。(比如static char number 不用赋值,关键字为number的地址, )

关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用  预先定义好的常量来表示的。

设置关联:objc_setAssociatedObject(关联对象, &关键字, 被关联对象, OBJC_ASSOCIATION_RETAIN);

获取关联对象:  NSString * associatedObject = (NSString *)objc_getAssociatedObject(关联对象, &关键字);  //假如关键字是字符串类型

断开关联关系:objc_setAssociatedObject(关联对象, &关键字, nil, OBJC_ASSOCIATION_RETAIN);//被关联对象传nil即可

       使用函数objc_removeAssociatedObjects可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。

 

转载于:https://www.cnblogs.com/mojiewei/p/6275451.html

rutime 理解相关推荐

  1. 深入理解Java:注解(Annotation)基本概念、自定义注解、注解解析器

    深入理解Java:注解(Annotation)基本概念 什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadat ...

  2. 深入理解Java:注解

    注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程. Java提供了四种元注解,专门负责新注解的创建工作. 元注解 元注解的作用就是负责注解 ...

  3. Effulgent的《深入理解Direct3D9》整理版(转)

    深入理解Direct3D9 深入理解D3D9对图形程序员来说意义重大,我把以前的一些学习笔记都汇总起来,希望对朋友们有些所帮助,因为是零散笔记,思路很杂,还请包涵. 其实只要你能完美理解D3DLOCK ...

  4. Java:annotation注解的简单理解和总结

    Java annotation 注解Annotation 1.Annotation的概述 1.1.定义 1.2.Annotation作用分类 1.3.Annotation 架构 2.Annotatio ...

  5. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  6. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  7. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  8. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  9. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  10. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

最新文章

  1. Python基础笔记1
  2. legend3---lavarel多对多模型操作实例
  3. Revit二次开发之“创建尺寸标注”
  4. 实验吧— Crypto Write up(一)
  5. linux下使用lftp的小结
  6. 干货 | Elasticsearch开发人员最佳实战指南
  7. mysql 乐观锁_使用Mysql乐观锁解决并发问题
  8. Connect 2016过后,你的信仰势必需要更大的容器
  9. OpenGL EGL GPU工作流程理解(十四)
  10. 巧用BroadcastReceiver实现开机“自”启动
  11. 任正非号召华为员工学习一份20页 5G PPT:认识5G,发展5G
  12. VB获取窗体的位置和大小
  13. PC-DMIS 圆(环)型平面自动测量子程序
  14. 关于计算机的CPU的发展历史,计算机CPU的全部发展历史
  15. vue2.0 基础知识
  16. 运维的职业发展方向有哪些?该如何规划?
  17. MATLAB算法实战应用案例精讲-【人工智能】SLAM(概念篇)
  18. 宣传活动任务后台管理之促销活动业务分析...
  19. 思维导图软件MindManager导出Word文档功能详解
  20. TypeScript try-catch异常处理

热门文章

  1. hashmap value占用空间大小_如何获取 java hashmap占用存储空间空间大小
  2. linux 线程同步与互斥:读写锁 线程读操作较多,写操作较少时,使用读写锁
  3. [渝粤教育] 中国地质大学 计算机组成原理 复习题 (2)
  4. [渝粤教育] 中国地质大学 信息检索 复习题
  5. 【渝粤题库】陕西师范大学201311 刑法学作业
  6. 【渝粤题库】广东开放大学 文化产业概论 形成性考核 (2)
  7. 【sklearn第十九讲】高斯混合模型
  8. 如何精通C++ 摘自知乎和quora
  9. understand 4 for linux register key code 随意、任性拥有。。。。
  10. 多因子策略介绍与应用