美文网首页
Self关键字

Self关键字

作者: 草莓味辣妹 | 来源:发表于2019-03-21 16:43 被阅读0次

Self关键字代表什么

在实例方法中Self指代本类的实例对象。
在类方法中Self指代类对象

为什么可以在方法中使用self

这里涉及到好几个runtime的知识点

类方法和实例方法

实例方法存储在类对象class结构中,类方法存储在元类中,实例方法只能由实例对象去调用,而类方法只能由类对象去调用
一个方法的调用其实是给一个对象发送消息

id objc_msgSend ( id self, SEL op, ... );

当objc_msgSend找到方法对应的实现时,它将直接调用该方法实现,并将消息中所有的参数都传递给方法实现,同时,它还将传递两个隐藏的参数:
接收消息的对象(也就是self指向的内容)
方法选择器(_cmd指向的内容)

一个方法的实现代码在运行时会转换成C++代码,会传入参数消息接受者id self 和方法名。
因此当方法的调用者为实例对象时,传入的为实例对象(self指向实例对象);当方法的调用者为类对象时,传入的为类对象(self指向类对象)。
这也是为什么实例方法中self指向实例对象,而类方法中self指向类对象
self是指向本类的指针,是类的隐藏参数,指向当前调用方法的对象(类对象或者实例对象)
通过self,可以在方法实现中访问消息接收者对象的实例变量。

self = [super init];

如果是[super init]的话,super会调用其父类的init,以此类推,直到找到根类NSObject中的init。然后根类中的init负责初始化内存区域,添加一些必要的属性,返回内存指针,延着继承链,指针从上到下进行传递,同时在不同的子类中可以向内存添加必要的属性。最后直到我们当前类中把内存地址赋值给self参数。当然,如果调用[super init]失败的话,通过判断self来决定是否执行子类的初始化操作。

参考链接

https://www.jianshu.com/p/9b36e1b636d8

相关文章

  • Swift3.0 Self和self的区别

    相信大家都知道self关键字的作用, 但你知道Swift还有个Self关键字吗?Self关键字只能用在类里, 作为...

  • 04-面向对象语法-self关键字

    一、self(关键字)的用途: 二、self访问成员变量(self -> 成员变量) 三、self调用方法可以利用...

  • 12.18

    一、python USB是半双工通讯 self:关键字,是指对象 ——init——初始化构造函数关键字 self....

  • Django类视图

    关键字 response self request object

  • Self关键字

    看清楚哦亲,是Self不是self 直接上代码: protocol IntervalType { func cl...

  • self关键字

    Self是一个指针,谁调用了当前方法,self就指向谁 【出现在对象方法中,就代表着当前对象,出现在类方法中,就代...

  • Self关键字

    Self关键字代表什么 在实例方法中Self指代本类的实例对象。在类方法中Self指代类对象 为什么可以在方法中使...

  • Self关键字

    OC提?供了两个保留字self和superOC语言中的self,就相当于C++、Java中的this指针。 要理解...

  • 探究Objective-C中self 与super的区别与底层实

    1、self和super关键字解释? (1)官方文档中self相关解释: Whenever you’re writ...

  • [OC]self与super调用本质分析

    一、self 基本说明 在日常开发中,我们经常使用到self关键字,比如,访问属性,调用实例方法等。那么self到...

网友评论

      本文标题:Self关键字

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