美文网首页
iOS runtime(一)数据结构和元类

iOS runtime(一)数据结构和元类

作者: Nomo_C | 来源:发表于2018-03-09 20:46 被阅读0次

    Runtime全方位装逼指南

    Runtime系列(浅析数据结构)

    数据结构

    Class:结构体objc_class的指针

    id:结构体objc_object的指针。objc_object中的isa指向元类

    SEL:它是映射到方法的字符串,可以使用Objctive-C的编译器命令@selector或者Runtime的sel_registerName函数获得一个SEL类型的方法选择器。需要注意的是只要方法名相同,SEL就相同,所以下面这种情况编译器会报错:

    - (int)helloworld:(int)flag;

    - (float)helloworld:(float)flag;

    IMP:函数指针

    objc_class

    isa:指向元类

    super_class:当前类的父类

    name:类名

    version:版本信息

    info:提供运行期使用的标示符

    instance_size:当前类实例对象大小(包含父类)

    ivars:成员变量列表

    methodLists:指向该类实例方法列表,将方法选择器和方法实现地址联系起来。methodLists是指向objc_method_list指针的指针,也就是说可以动态修改*methodLists的值来添加成员方法,这也是category的实现原理,同样解释了category不能添加变量的原因。

    cache:Runtime 系统会把调用的方法存储到cache,下次查找的时候效率更高。

    protocols:指向该类的协议列表

    类与元类

    isa表示:实例对象的类是类对象,类对象的类是元类对象,元类对象的类是根元类(isa指向自己)。

    类对象的父类最终都继承自根类对象NSObject,NSObject的父类是nil

    元类对象(包括根元类)的父类最终继承自根类对象NSObject

    相关文章

      网友评论

          本文标题:iOS runtime(一)数据结构和元类

          本文链接:https://www.haomeiwen.com/subject/fjayfftx.html