每个java应用程序都有一个runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime 方法获取当前运行时,应用程序不能自己创建runtime类实例。Runtime 没有构造方法,说明不能创建对象。当这个类没有构造方法而且有非静态的方法,说明,这个类至少有一个静态方法,而且返回的是该类的对象。runtime就提供了一个静态的获取对象的方法,并且这个方法采用了单例模型的设计模式,保证了唯一性。

面试问答:
问:你用过单例吗?在哪里见过或者用过单例?
答:runtime就是一个单例的例子。

Runtime的最大优势:能拿到与内存数的数据。有的应用可以拿到虚拟机的内存。

  • Runtime的简介
runtime就是运行时。OC是运行时机制,其中最主要的是消息机制。
对于C语言而言,在编译的时候,就会决定调用了哪个函数。也就是说,在编译的时候,C语言调用未实现的函数会报错。
对于OC来说,是属于动态调用过程,在编译的时候并不能决定调用哪个函数。只有真正运行的时候才根据函数名去获取该方法的函数。也就说,在编译的时候,OC可以调用任何方法,即使这个函数并未实现,只要声明了就可以。
  • Runtime的交换方法
  • //这个方法只调用一次,就是分类加载的时候
    + (void)load {
    // 交换方法的实现
    }

  • Runtime获取对象的属性
  • Iva 成员变量
    Method 方法
    Property 属性
    Protocol 协议 思路:
    1.创建NSObject的分类,添加一个获取对象属性的方法:   + (NSArray *)getPropertyList;
    2.用class_copyPropertyList这个方法获取类的所有属性,但是这个是C语言的,需要转化一下
    
    

  • 用runtime添加属性值
  • 假设创建了一个person类,需要在分类上添加一个属性height,步骤如下:
    .添加一个person的分类 在分类的.h 上 添加一个属性
    @interface Person (category) @property (nonatomic, copy) NSString *height; @end 在分类的.m 上 添加如下的代码 (需要导入头文件:#import <objc/message.h>) - (void)setHeight:(NSString *)height { //保存属性到系统的类
    //产生关联,让某个对象(height)与当前对象的属性的height产生关联
    //object:给哪个对象添加属性
    //key:属性名
    //value:属性值
    //policy:策略
    objc_setAssociatedObject(self, @"height", height, OBJC_ASSOCIATION_COPY_NONATOMIC);
    } - (NSString *)height {
    return objc_getAssociatedObject(self, @"height");
    }

OC-Runtime温故知新的更多相关文章

  1. OC - runtime 之关联对象

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  2. OC Runtime

    OC 是面向运行时的语言.Runtime就是系统在运行的时候的一些机制,其中最主要的是消息发送机制.OC语言与其他语言(如C语言)在函数(方法)的调用有很大的不同.C语言,函数的调用在编译的时候就已经 ...

  3. iOS - OC RunTime 运行时

    1.运行时的使用 向分类中添加属性 // 包含运行时头文件 #import <objc/runtime.h> /* void objc_setAssociatedObject(id obj ...

  4. oc - runtime运行机制

      Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时做的事放到了运行时来处理.同时OC也是一门简单的语言,很大一部分是C的内容,只是在语言层面上加了关键字和语法,真正让OC强大 ...

  5. 18 (OC)* RunTime

    目录: 一.怎么理解OC是动态语言,Runtime又是什么?二.理解消息机制的基本原理三.与Runtime交互的三种方式四.分析Runtime中的数据结构五.深入理解Rutime消息发送原理六.多继承 ...

  6. OC - runtime - 1

  7. OC 相关

    1.OC runtime的理解[转载] http://www.csdn.net/article/2015-07-06/2825133-objective-c-runtime/1

  8. iOS RunTime运行时(1):类与对象

    Objective-C语言是一门动态语言,他将很多静态语言在编译和链接期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码更具有灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一下 ...

  9. iOS运行时Runtime浅析

    运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行.例如[target doSomething];会被转化成objc)msgSend(target,@select ...

  10. Objective-C的对象模型和runtime机制

    内容列表 对象模型(结构定义,类对象.元类和实例对象的关系) 消息传递和转发机制 runtime系统功能理解 对象模型 结构定义 对象(Object): OC中基本构造单元 (building blo ...

随机推荐

  1. Jordan 标准型的实例

    将学习到什么 练习一下如何把一个矩阵化为 Jordan 标准型.   将矩阵化为 Jordan 标准型需要三步: 第一步 求出矩阵 \(A \in M_n\) 全部的特征值 \(\lambda_1,\ ...

  2. jquery 获得某一组name的id并合并

    var attachmentids = $("input[name='attachmentid']").map(function(){return $(this).val()}). ...

  3. shell脚本,tee小工具的用法。

    解释: tee是个工具 , 它的作用就是把标准输出,复制一份,扔文件里 ,原标准输出还输出,-a就相当于 >> 追加到文件里的意思.  不加就是 > 重定向到文件里去.

  4. OmniFocus

    褪墨・时间管理 “把所有事情都从你的脑袋里弄出来.在事情出现就做好相关行动的一系列决定,而不是在事情爆发的时候.以合适的类别组织好你的项目的各种提醒以及下一步行动.保持你的系统更新和完整,及时进行回顾 ...

  5. C# Excel常用控件总结

    参考:https://blog.csdn.net/waterstar50/article/details/80590355 1.ClosedXML2.EPPlus 教程:http://www.cnbl ...

  6. 【线段树 细节题】bzoj1067: [SCOI2007]降雨量

    主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...

  7. [LUOGU] P2330 [SCOI2005]繁忙的都市

    题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...

  8. 【Java_基础】java中的多态性

    方法的重载.重写和动态链接构成了java的多态性. 1.方法的重载 同一个类中多个同名但形参有所差异的方法,在调用时会根据参数的不同做出选择. 2.方法的重写 子类中重新定义了父类的方法,有关方法重写 ...

  9. docker:安装redis

    文章来源:https://www.cnblogs.com/hello-tl/p/9239474.html 1.添加镜像 # docker pull redis:4.0 2.在/data下新建文件夹re ...

  10. Java面试——HashCode的作用原理和实例解析

    ,也就是说,我们先通过 HashCode来判断两个类是否存放某个桶里,但这个桶里可能有很多类,那么我们就需要再通过 equals 在这个桶里找到我们要的类. 请看下面这个例子 : public cla ...