黑马程序员技术交流社区

标题: self 和 super [打印本页]

作者: 康佳兴    时间: 2014-6-13 21:23
标题: self 和 super
给位大神给详细的解释一下呗?
作者: 陈超众    时间: 2014-6-14 01:34
坐等大神
作者: Littlekin    时间: 2014-6-14 07:24
这个跟C++的差不多,self相当于this,指的是本类的对象,而super指的是父类的对象。 区别是self 调用方法时,会从当前类的方法列表中开始寻找,如果没有,就从父类中再找。而 super ,则从父类的方法列表中开始找。
作者: 为梦想挺身而出    时间: 2014-6-14 07:54
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> 使用场景: 子类重写父类的方法时,想保留父类的一些行为
作者: 脸皮猴    时间: 2014-6-14 08:18
楼上回答的很详细,
作者: 董月峰    时间: 2014-6-14 08:34
脸皮猴 发表于 2014-6-14 08:18
楼上回答的很详细,

猴哥猴哥,你真了不得。楼主可以看看,学习日记,学习日志就在很多人的blog里面
作者: 戒惜舍得    时间: 2014-6-15 10:27
   一期的 同志们都跑来了。。。
作者: wanzhu159    时间: 2014-6-15 14:24
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方法来释放,然而在此之前你需要先把自己所写类中的变量内存先释放掉,否则就会造成你本类中的内存积压,造成泄漏”。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2