美文网首页
OC对象的本质

OC对象的本质

作者: zhuzhilong | 来源:发表于2018-11-08 10:25 被阅读0次

所有类都继承 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


相关文章

网友评论

      本文标题:OC对象的本质

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