iOS 类对象可以调用NSObject实例方法,实例对象不能调用类方法

学习Class结构体的同学都知道,iOS Class的结构体如下图所示:

类机构体

而了解对象数据存储的同学都知道:实例对象的实例变量是存在实例对象里的,实例方法是存在实例对象isa指向的类对象里,类方法是存在类对象isa指向的元类对象里,isa 指向和Class的继承关系如下图所示:

方法流程图

当Subclass 调用方法会沿着 Subclass(meta)-> Superclass(meta) ->RootClass(meta)->NSObject 查找方法,而根元类存的是类方法,NSObject 存的为实例方法,所以subClass 可以调用NSObject实例方法。而NSObject的父类为nil,故Subclass的实例不能调用NSObject的类方法。

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

推荐阅读更多精彩内容