A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 康佳兴 中级黑马   /  2014-6-13 21:23  /  2170 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

给位大神给详细的解释一下呗?

7 个回复

正序浏览
4、Self和super的区别?
self
     1)谁调用了当前方法,self就代表谁。如果self出现在对象方法中就代表对象,出项在类中就代表类。类是没有成员变  量的,只有对象才有成员变量。

    2)可以用self访问当前对象内部的其他成员变量。

     3)[self 方法名]可以调用当前类或对象的其他方法。
super
     1)直接调用父类的某个方法

  2)super处在对象方法中,就调用父类的对象方法,super处在类方法中,就会调用父类的类方法。

区别:
1、self是一种类型数据,类里面的每个方法都会存放在对应一个self类型变量,当一个对象调用一个方法时,会把方法名字先包装成一个self类型数据,然后这个对象会根据isa指针找到当前类里面与之对应的self类型数据,然后再把数据里面存放的方法地址给这个对象使用。而super是一个编译器指示符。

2、如果你对 self 发送了消息,那么运行时首先就会在这个对象的类中寻找相应的方法实现;如果这里找不到,那它会转而到其父类中去查找(如此往复)。如果你对 super 发送消息,运行时首先就是去父类中寻找方法的实现。

3、super还有一个用法就是要及时的释放变量的内存。因为每个类都是从父类,根类继承来的,有很多实例变量也会继承过来,这部分变量有时候会在你的程序内使用,它们不会自动释放内存,你需要调用父类的 dealloc方法来释放,然而在此之前你需要先把自己所写类中的变量内存先释放掉,否则就会造成你本类中的内存积压,造成泄漏”。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
   一期的 同志们都跑来了。。。
回复 使用道具 举报
脸皮猴 发表于 2014-6-14 08:18
楼上回答的很详细,

猴哥猴哥,你真了不得。楼主可以看看,学习日记,学习日志就在很多人的blog里面
回复 使用道具 举报
楼上回答的很详细,
回复 使用道具 举报
self
1> self是个指针,指向调用当前方法的那个对象
2> 用self->,指向了方法调用者,代表了当前对象
3> 当发现这里的变量跟成员变量一模一样,又要访问成员变量就用self

self的用途
1> 谁调用了当前方法,self就代表谁
2> self出现在对象方法中,self就代表对象
3> self出现在类方法中,self就代表类
4> 在对象方法中可以利用self->成员变量名,访问当前对象内部的成员变量
5> [self 方法名]调用当前对象的方法,可以调用对象方法和类方法

self的注意点
1> 当self调用当前对象的当前方法或者当前类的当前方法时会进入死循环
2> 函数跟对象一点关系都没有
3> 当self代表类的时候只能调用类方法,不能调用对象的方法

super
作用: 可以直接调用父类中的某个方法
1> super处在对象方法中,那么就会调用父类对象方法
2> super处在类方法中,那么就会调用父类的类方法
3> 调用的取决于方法的类型,类方法找加号,对象方法找减号
4> 想重写父类的某些方法,先调用父类的方法再在父类的基础上加上其他方法
5> 使用场景: 子类重写父类的方法时,想保留父类的一些行为

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报 1 0
这个跟C++的差不多,self相当于this,指的是本类的对象,而super指的是父类的对象。 区别是self 调用方法时,会从当前类的方法列表中开始寻找,如果没有,就从父类中再找。而 super ,则从父类的方法列表中开始找。
回复 使用道具 举报
坐等大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马