美文网首页
OC中类的本质总结

OC中类的本质总结

作者: Sherlock_Jim | 来源:发表于2020-07-04 15:51 被阅读0次

1.什么是类加载?

在创建对象的时候,肯定是需要访问类的.所以在程序运行期间,当某个类第一次被访问到的时候,会将这个类存储到内存中的代码段区域,这个过程叫做类加载.

只有类在第一次被访问的时候,才会做类加载,一旦类被加载到代码段以后,直到程序结束的时候才会被释放.

2.类对象的获取方式和在内存中存储的信息包括哪些?

获取类对象方式和类对象在内存中存储的信息

3.类对象在内存中的真实结构(struct objc_class)

struct objc_class 的本质结构

4.元类对象(meta - class)的获取方式 

ps:只有通过object_getClass()这个RuntimeAPI才能获取meta-class对象 , 无论使用多少次class方法只能获取class对象.

元类对象的获取方式 元类对象打印的地址值 是不同于类对象的

5.元类(meta-class)对象的内部结构

元类对象的内部结构

meta-class对象和class对象的内存结构是一样的,只是说在meta-class对象中的类方法信息是有值的,而class对象中的类方法信息是null,同样在class对象中属性信息、对象方法信息、协议信息、成员变量信息这些是有值的,而类方法信息是null.

6.关于返回类对象还是元类对象的方法总结

1.Class objc_getClass(const char *aClassName)

1>传入字符串对象

2>返回对应的类对象

2.Class object_getClass(id obj)

1>传入的obj是OC对象,OC对象包括instance对象、class对象、meta-class对象.

2>返回值

a.如果是instance对象,返回class对象.

b.如果是class对象,返回meta-class对象.

c.如果是meta-class对象,返回NSObject(基类)的meta-class对象.

3.-(Class)class、+(Class)class

1>返回的就是类对象

7.关于isa、superclass总结

isa、superclass的总结

1)instance调用对象方法的轨迹

通过isa指针找到class对象,如果class对象里这个对象方法不存在,就通过superclass指针找父类class对象,如果没有就一直通过superclass指针找父类class对象,一直找到NSObject类对象,NSObject类对象里还没有要找的对象方法,就报unrecognized selector sent to class.

2)class调用类方法的轨迹

通过isa指针找到元类对象,如果类方法不存在,就通过superclass指针找父元类对象,一直找到NSObject元类对象,如果NSObject元类对象也没有这个类方法,还会通过superclass指针去找NSObject类对象,如果NSObject类对象里还是没有要找的类方法,就报错.

8.对象的isa指针指向哪里?

1)instance对象的isa指向class对象.

2)class对象的isa指向meta_class对象.

3)meta-class对象的isa指向基类的meta-class对象.

9.OC的类信息存放在哪里?

1)对象方法、属性、成员变量、协议信息,存放在类对象里.

2)类方法,存放在meta-class对象中.

3)成员变量的具体值,存放在instance对象中.

相关文章

  • OC中类的本质总结

    1.什么是类加载? 在创建对象的时候,肯定是需要访问类的.所以在程序运行期间,当某个类第一次被访问到的时候,会将这...

  • Runtime:OC对象、类、元类的本质

    零、Runtime是什么一、OC对象的本质二、OC类的本质三、OC元类的本质四、Runtime关于对象、类、元类的...

  • OC中类的本质

    OC中的对象的本质 对象本身是一个含有isa指针的结构体,isa指针指向对象所属的类类的本质:类本质也是一个结构体...

  • Runtime基础类型介绍

    Class:类Instance:实例 OC中的对象的实例本质上是 OC中的类本质上是 isa_t的结构是 这是一个...

  • OC对象的本质(上)

    iOS | OC对象本质 | Objective-C 什么是OC语言,OC对象、类的本质是什么,OC对象的内存布局...

  • iOS底层原理总结-- KVO/KVC的本质

    iOS底层原理总结--OC对象的本质(一) - 掘金 iOS底层原理总结--OC对象的本质(二) - 掘金 iOS...

  • OC中block底层原理总结(下)

    关于OC中block的本质结构、block的变量捕获方式请查看OC中block底层原理总结(上)需要先看懂上篇文章...

  • 类的本质 - OC

    Person *p = [Person new]; 我们都说p是Person类型的变量,但其Person它其实还是...

  • OC 与 Swift

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

  • OC对象的本质(中)—— OC对象的种类

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

网友评论

      本文标题:OC中类的本质总结

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