运行时

背景:开发的时候一般用不上,底层框架会用到

运行时常用的面试题

1.什么是运行时
    1>运行时是一套纯C语言的API
   
     2>利用运行时,可以做很多底层的操作, (使用命令行工具  clang -rewirte-objc xxx.m)
              *  比如动态添加成员变量和方法
              * 可以动态交换两个方法的实现(特别是交换系统自带的方法)
            * 还可以获得某个类的成员方法和成员变量
     
     3>编译器最终都会将OC代码转化为运行时
    


2.如何应用运行时

   1>将某些oc代码转换为运行时代码:探究底层,比如说block的实现原理
   
   2>拦截系统自带的方法调用(imageNamed    viewDidLoad  alloc  都可以)
   
   3>获得某个类的所有成员方法和变量   实现模型和字典自动转换!!!
      
   4>能实现分类 增加属性(每个对象的属性互不干扰)

   5>能实现NSCoding属性的自动归档和自动解档

3.运行时常用的函数
*<objc/runtime.h>
  1>Method class _getClassMethod(Class cls, SEL name);
      获得某个类的类方法
  2>Method class _getInstanceMethod(Class cls, SEL name);
      获得某个类的对象方法
  3>void method_exchangeImplementation(Method m1 .Method m2)
      交换两个方法的实现
  4>void objc_setAssociatedObject (id object,  const  void  *key ,  id  value , objc_AssociationPolicy policy)
      将值value  跟  对象object  关联起来
      
  5> void objc_getAssociatedObject (id object,  const  void  *key)

  6>Ivar  *class_copyIvarList(Class  cls , unsigned  int  *outCount)  
     获得某个类的所有成员变量 (outCount会返回成员变量的总数 )

  7>const  char  *ival_getName(Ivar  v)
     获得某个成员变量的名字

  8>const  char  *ival_getTypeEncoding(Ivar  v)
      获得某个成员变量的类型

*<objc/message>
  1>void objc_msgSend(void)
      给某个对象发送消息
  






转载于:https://www.cnblogs.com/G-Flager/p/5267423.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值