美文网首页
再看一眼class方法

再看一眼class方法

作者: 卖萌凉 | 来源:发表于2016-07-26 22:07 被阅读175次

来做几道面试题



第一题:

MyObject *myObject = [[MyObject alloc] init];
Class clazz1 = [myObject class];

请问```clazz1```指的是?

>A. MyObject类
B. MyObject的元类


第二题:

>```
Class clazz2 = [MyObject class];

请问clazz2指的是?

A. MyObject类
B. MyObject的元类

我当时的回答:
第一题:我猜class方法肯定是获取了对象的isa指针,所以选择了A。
第二题:我猜class方法肯定是获取了对象的isa指针,所以选择了B。

然后面试官说:那你平时用isKindOfClass:这个方法的时候,传的参数都是什么样的呢?

我一想,诶,平时用isKindOfClass:的时候,我一般都这样写:

[myObject isKindOfClass:[MyObject class]];

如果第二题的答案是B的话,用这种方式来判断myObject的类型,肯定得到的是错误的答案。

???懵逼中……


解答



查看了一下NSObject的头文件,其实可以看到,NSObject分别有

- (Class)class;

+ (Class)class;

两个class方法,分别为实例方法和类方法。

这两个方法都是怎么实现的呢?其实通过开源的runtime源码可以看到这两个方法的具体实现:

+ (Class)class {
    return self;
}

- (Class)class {
    return object_getClass(self);
}

可以看到,+class方法直接返回类自身,而-class方法返回isa指针指向的对象,也就是这个对象所对应的类。

所以这两道题都应该选择A。

(╥﹏╥)


参考

objc4-680

相关文章

  • 再看一眼class方法

    来做几道面试题 第一题: MyObject *myObject = [[MyObject alloc] init]...

  • 2018-02-20

    请再看,再看我一眼 请再看,再看我一眼 在风中 在雨中 ...

  • Runtime源码解析-类中bits

    Runtime源码解析-类中bits 首先我们再看一眼objc_class类的定义,本篇文章研究bits到底存储了...

  • 再看你一眼

    再看你一眼 让我再看你一眼 现在起,到下个瞬间 我再看你一眼 从发丝边,缓缓落到你唇间 再看你一眼 漫漫的岁月,咻...

  • 我不想在没有你的地方看世界了

    有人说:“看一眼就喜欢的人,再看一眼还是会喜欢。”你是我看一眼,再看一眼,再看一眼,也还是会喜欢的人。 在我们分开...

  • 再看一眼

    不知道这世界这是怎么了,还是我怎么了。白天身体是别人的,晚上脑子又是别人的。即使在梦里也处在世界的极端。 ...

  • 再看一眼

    再看一眼,此生难再见,再见亦不是从前

  • 再看一眼

    在断墙残壁中 在满目荒凉中 你寻觅着 那步伐的沉重与坚毅 可比废墟中的残石 终于 在孤独衰败的绿色前 你止住步子 ...

  • 再看一眼,

    琴棋书画已经拦不住你 诗词歌赋也不过是小儿科 你已经足够成熟 再也不是,扯着我的衣角, 躲在身后那个怯生生的你, ...

  • 再看一眼

    我总说, 打完这最后一个电话, 发完这最后一条短信, 听完这最后一首情歌, 然后 将所有关于你的记忆, 统统打包扔...

网友评论

      本文标题:再看一眼class方法

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