美文网首页将来跳槽用
self和super的区别

self和super的区别

作者: 原来是泽镜啊 | 来源:发表于2019-08-22 13:42 被阅读0次
self和super的区别
  • self调用自己方法,super调用父类方法

  • self是类,super是预编译指令

  • [self class] 和 [super class] 输出是一样的

  • self和super底层实现原理

1.当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;

而当使用 super 时,则从父类的方法列表中开始找,然后调用父类的这个方法

2.当使用 self 调用时,会使用 objc_msgSend 函数:

 id objc_msgSend(id theReceiver, SEL theSelector, ...)

第一个参数是消息接收者,第二个参数是调用的具体类方法的 selector,后面是 selector 方法的可变参数。以 [self setName:] 为例,编译器会替换成调用 objc_msgSend 的函数调用,其中 theReceiver 是 self,theSelector 是 @selector(setName:),这个 selector 是从当前 self 的 class 的方法列表开始找的 setName,当找到后把对应的 selector 传递过去。

3.当使用 super 调用时,会使用 objc_msgSendSuper 函数:

  id objc_msgSendSuper(struct objc_super *super, SEL op, ...)

第一个参数是个objc_super的结构体,第二个参数还是类似上面的类方法的selector

struct objc_super {
    id receiver;
    Class superClass;
};

BAT面试题合集地址:https://www.jianshu.com/p/75e4b9fdcf41

相关文章

  • Objective-C self与super的区别

    Objective-C self与super的区别 [self class] 和 [super class] 在当...

  • self、 superclass 、 super的区别

    self、 superclass 、 super的区别 self、 superclass 、 super self...

  • self和super的区别

    self和super的区别 self调用自己方法,super调用父类方法 self是类,super是预编译指令 [...

  • class

    1.[self class]和 [super class] self和super的区别: self是类的一个隐藏参...

  • self和super区别

    在objc中的类实现中经常看到这两个关键字”self”和”super”,但他们的区别表现在各个方面。以下面的代码为...

  • self和super区别

    self:调用自己方法,它是类super:调用父类方法,它是预编译指令【self class】和【super cl...

  • iOS self 和 super区别以及为什么要self = [

    //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄 一、self和super区别 区别:- self调...

  • self和super的区别

    关于 self 和 super 在oc 中 的疑惑 与 分析 这个问题貌似很初级,但很容易让人忽略,me too ...

  • self和super的区别

    由一个面试题引出的问题,为什么[self class]和[super class]打印的结果一样? 这里,我们使用...

  • iOS - 关键字self和super

    一、self 和 super 区别 self 是类,super 是预编译指令(就是给编译器看的,不是一个指针; 只...

网友评论

    本文标题:self和super的区别

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