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方法来释放,然而在此之前你需要先把自己所写类中的变量内存先释放掉,否则就会造成你本类中的内存积压,造成泄漏”。
|