iOS-20-runtime解析

http://ios.jobbole.com/84919/
http://www.jianshu.com/p/f900de4a1495
实例对象instance->类class->方法method(->SEL->IMP)->实现函数
实例对象只存放isa指针和实例变量,由isa指针找到所属类,类维护一个运行时可接收的方法列表;方法列表中的每个入口是一个方法(Method),其中key是一个特定名称,即选择器(SEL),其对应一个指向底层C实现函数的指针,即实现(IMP),。运行时机制最关键核心是objc_msgSend函数,通过给target(类)发送selecter(SEL)来传递消息,找到匹配的IMP,指向实现的C函数。

  • 类相关:
    + 数据类型:class,object;
    - isa 元类
    - superClass 根类
    + 操作函数:
    - class_:
    + get: 类名,父类; 实例变量,成员变量;属性;实例方法,类方法,方法实现;
    + copy: 成员变量列表;属性列表;方法列表;协议列表;
    + add: 成员变量;属性;方法;协议;
    + replace:属性;方法;
    + respond:响应方法判断(内省)
    + isMetaclass:元类判断(内省)
    + conform:遵循协议判断(内省)
    - objc_:
    + get: 实例变量;成员变量;类名;类;元类;关联对象;
    + copy: 对象;类;类列表;协议列表;
    + set: 实例变量;成员变量;类;类列表;协议;关联对象;
    + dispose: 对象;
    - 动态创建/销毁类、对象
  • 成员变量、属性相关:
    + 数据类型:Ivar;objc_property_t;objc_property_attribute_t;
    + 操作函数:
    - ivar_:
    - property_:
  • 方法消息相关:
    + 数据类型:SEL;IMP; Method;方法缓存
    + 操作函数:
    - method_:
    + invoke: 方法实现的返回值;
    + get: 方法名;方法实现;参数与返回值相关;
    + set:方法实现;
    + exchange:交换方法实现
    + 方法调用:msgSend函数(找到方法实现)
    + 消息转发:
    - Method Resolution
    - Fast Forwarding
    - Normal Forwarding
  • 协议相关:
    + 数据类型:Protocol;
    + 操作函数:
    - protocol_:
    + get: 协议;属性;
    + copy:协议列表;属性列表;
    + add:属性;方法;协议;
    + isEqual:判断两协议等同;
    + comform:判断是否遵循协议;
  • 其他:类名;版本号;类信息;(忽略)

你可能感兴趣的:(iOS-20-runtime解析)