zoukankan      html  css  js  c++  java
  • OC-Runtime温故知新

    每个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,步骤如下:
      1.添加一个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");
      }
  • 相关阅读:
    爬虫header和cookie
    爬虫代理squid
    response对象
    pyspider中内容选择器常用方法汇总
    非阻塞 sleep
    post请求体过大导致ngx.req.get_post_args()取不到参数体的问题
    常用lua代码块
    nginx静态文件缓存的解决方案
    lua-resty-gearman模块
    非在线PDF转图片!!!
  • 原文地址:https://www.cnblogs.com/lyz0925/p/9735745.html
Copyright © 2011-2022 走看看