OC-Runtime温故知新

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

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

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

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

OC-Runtime温故知新

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

OC-Runtime温故知新

  • 用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");
    }
上一篇:go语言学习-常用命令(四)


下一篇:HDU 2458 - Kindergarten