OC对象的本质

所有类都继承 NSObject(排除特殊的类,比如NSProxy) ,那么下面我们来看看NSObject内部是如何实现,内部实现代码如下:

struct objc_object {

    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;

};

这说明NSObject是一个结构体指针,是一个isa指针,那么isa是干嘛用的呢,既然isa是一个指针,必然指向某个地方,那它指向哪里呢?

现在我们创建一个Car类 里面有两个方法分别是实例方法和类方法

-(void)run;

+(void)run;

然后调用  Car * car = [ Car  alloc]init];

[car run ];

[Car  run];

然后看下面这幅图

当我们调用[car run ],通过isa指针找到class再找到对象方法的实现并调用

当我们调用[Car  run],通过isa指针找到meta-class再找到类方法的实现并调用

这样就串起来了

上面我们看到还有一个superclass,其实它也是一个指针,比如Car继承自NSObject,那Car的superclass就是NSObject,是通过superclass这个指针去查找到的

在比如[ car init]我们这样去调用  这个init方法是NSObject,也就是说先通过car的isa指针找到car class,在通过class 的superclass指针找到meta-class再找到类方法的实现并调用,如果没有父类superclass为nil




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容