美文网首页
iOS 根元类的父类

iOS 根元类的父类

作者: 言霏 | 来源:发表于2020-07-01 17:40 被阅读0次
官方例图.png

上图可以得知

每个类都有自己特有的类对象、元类,父子类的类对象、元类也为父子关系。
类对象的父类最终会指向nil,而元类的父类最终指向了根的类对象。

有如下代码:

@interface NSObject (sport)
/// 给NSObject添加类方法声明
+(void)run;

@end

@implementation NSObject (sport)
/// 实现却是实例方法
- (void)run {
    NSLog(@"run.....");
}
@end

- (void)viewDidLoad {
    [super viewDidLoad];
    // 调用
    [NSObject run];
}

输出:
2020-07-01 15:49:04.075158+0800 Demo[7175:1743450] run.....

明明调用的是NSObject的类方法,但是最终却调用到了实例方法,why……
结合上图,NSObject就是根类对象Root class(class),当调用[NSObject run]时会根据其isa指针找到根元类Root class(meta),但是根元类中并没有方法run方法(元类中只会储存类方法的实现),接着会到根元类的父类根类对象Root class(class)中查找,而其中确有run方法,就这样实例方法被调用到了。
实际上所有NSObject的实例方法都可以通过调用类方法的形式进行调用,并且如下可以调用:

[UIViewController run];
[UIColor run];
[UIButton run];

但是注意一下情况:

@interface UIViewController (sport)

+ (void)jump;

@end

@implementation UIViewController (sport)

- (void)jump {
    NSLog(@"jump.....");
}

@end

- (void)viewDidLoad {
    [super viewDidLoad];
    // 调用
    [UIViewController jump];
}

此时[UIViewController jump]就会crash,UIViewController相当于上图中的类对象Superclass(class),调用jump会去其isa指向的元类Superclass(meta)中寻找-没有,去元类的父类Root class(meta)寻找-没有,再去其父类Root class(class)寻找也没有,因为jump方法是在类对象Superclass(class)中保存的,最终crash掉。

相关文章

  • iOS 根元类的父类

    上图可以得知 每个类都有自己特有的类对象、元类,父子类的类对象、元类也为父子关系。类对象的父类最终会指向nil,而...

  • isa

    NSObject的父类为nil NSObject的isa为根元类 元类的isa都为根元类 根元类的isa为本身 根...

  • isa指针的作用

    原文:iOS面试题大全 对象的isa指向类,类的isa指向元类(meta class),元类isa指向元类的根类。...

  • 3.isa

    isa指向 ->实例isa -> 类|类isa -> 元类 | 元类isa -> 根元类|根元类isa -> 根元...

  • OC对象内存布局

    Q: 属性、变量、变量的值、类方法、对象方法怎么布局?元类、类对象、实例对象、根类之间的关系? A: 属性(包括父...

  • 四、iOS-类的结构分析

    一、类的探究 我们从上一篇文章iOS中的isa分析对象的时候已经过渡到类了,提到了 对象,类,元类,根元类等概念,...

  • isa相关的经典面试题分析

    前言 书接上回类的结构分析,我们得知isa指针的走位:对象 --> 类 --> 元类 --> 根元类-->根元类 ...

  • 类、对象、父类、元类

    python中一切皆对象 1. 名词解释 类: 类是一个抽象的概念,是一系列对象中相似特征与技能的结合体,不存在某...

  • iOS 对实例、类对象、元类、根元类验证

    精华Pod库分享 tableveiw 刷新控件 VNHttpRequest 一、类、根类、元类、根元类关系图 网上...

  • iOS开发中方法查找流程图

    实例对象的isa指针指向类对象,类对象的isa指针指向元类,元类的isa指针指向根元类,根元类的isa指针指向自己...

网友评论

      本文标题:iOS 根元类的父类

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