美文网首页
12.5 isa、SEL、IMP、Method结构体

12.5 isa、SEL、IMP、Method结构体

作者: 哈库呐玛塔塔__ | 来源:发表于2020-05-15 00:32 被阅读0次

isa

在objc.h的头文件,关于objc_object结构体的声明中,我们可以看到isa是一个Class类型的指针,指向的是对象所属于的类。如果这个对象是一个类对象,那么isa就指向这个类的元类。

但是当你查看objc_object结构体的源文件时,里边确是如下的定义,

isa_t是一个联合结构体。

因为2013年发布iphone5s,采用了64位的处理器,为了节省内存和提高执行效率,苹果对isa指针进行了优化。如果系统支持isa优化那么它就不一定是一个指向实例对象所属的类了。这里涉及到一个tagged pointer概念,也就是优化的主要内容。内部会通过判断,当前isa是一个指向类的指针,还是代表它是一个值,比如NSNumber。关于isa_t这个结构体,也有很多的内容,比如引用计数,weak变量的引用情况,析构状态等等。

https://www.jianshu.com/p/b4104747a592关于tagger pointer  和 NONPOINTER

SELselector是方法选择器,可以理解为区分方法的ID,而这个ID的数据结构是SEL。其实它就是个映射到方法的C字符串,你可以用Objc编译器命令 @selector() 或者Runtime系统的 sel_registerName 函数来获得一个 SEL 类型的方法选择器。

IMP是一个函数指针,指向的是函数的具体实现。在runtime中消息传递和转发的目的就是为了找到IMP,并执行函数。

Method是代表类中的某个方法的类型

方法名类型为 SEL,前面提到过相同名字的方法即使在不同类中定义,它们的方法选择器也相同。

方法类型 types 是个char指针,其实存储着方法的参数类型和返回值类型。

imp 指向了方法的实现,本质上是一个函数指针。

相关文章

网友评论

      本文标题:12.5 isa、SEL、IMP、Method结构体

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