iOS类分析

一、类分析

在我们日常使用中都是创建类都是继承自NSObject,在底层把我们的类编译成什么样子,我们也不是很清楚,今天我们把项目编译成c++源码来看一看类编译成什么样子。
首先我们创建一个项目,创建一个类,并将这个类用clang指令转换成c++编码。

创建一个新类

clang命令将main转换成cpp编码

打开cpp编码可以看到lengli这个类的类型是objc_object。我们看到这个方法指向的是objc_class。继续搜索我们没有看到objc_class的实现,所以我们回到源码继续搜索。

在源码中搜索objc_class,在objc-runtime-new.h 文件中看到了它的实现。
objc_class实现

看到这里可以看到objc_class继承的是objc_object,这也验证经典名句万物皆对象......。也就是说类也是一种对象。

二、类的结构

从上面的类分析中可以看出来,objc_class里面定义了有4个属性,剩下的都是实现。

  • isa指针
  • superclass指针
  • cache
  • bits
    这里isa指针是父类的,所以这里显示的是注释。

2.1isa指针

这里的isa是类与元类关联使用的。具体isa可以看上一篇文章。

2.2superclass指针

superclass指针看名字就可以看出来是指向父类的。

2.3cache

点进去看cache_t结构体,再继续点bucket_t,可以看到MethodCacheIMP这个属性,从字面上看cache这个应该是缓存类方法的,具体操作本篇不在讨论。


bucket_t结构体

2.4bits

下面的结构体中可以看到setData方法是给bits的data赋值,赋值的类型是class_rw_t,点进class_tw_t我们看看具体给的是什么内容。



来到class_tw_t我们可以看到里面的存储量methods、properties、protocols这些都是我们熟悉的内容。


class_tw_t

本章只是针对类进行分析查看类的结构,cache、bits将另外分出两篇文章再做探索。

你可能感兴趣的:(iOS类分析)