iOS开发OC之super关键词

super关键词经常使用,但是概念却有时候朦朦胧胧在此故意挖个坑,体会一下绕坑的感觉

  • 先上代码:

  • main.m文件

#import "ViewController.h"
#import "SubPerson.h"
void main(){
  SubPerson *p = [[SubPerson alloc] init];
  [p test];
}

  • Person.h文件
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void)test;
@end
  • Person.m文件
#import "Person.h"
@implementation Person
- (void)test{
    //结果验证 self -> SubPerson
    // SubPerson Person SubPerson Person
    NSLog(@"Person中的打印:%@ %@ %@ %@",[self class], [self superclass], [super class], [super superclass]);
}
@end

  • 子类SubPerson.h文件
#import "Person.h"
@interface SubPerson : Person

@end
  • 子类SubPerson.m文件
#import "SubPerson.h"

@implementation SubPerson
- (void)test
{
NSLog(@"SubPerson中的打印:%@ %@ %@ %@",[self class], [self superclass], [super class], [super superclass]);
    //仅仅是让子类对象调用父类的方法,并没有改变调用者的身份
    //即前面的执行对象改为自己,后面的方法替换为父类的方法来执行
    [super test];    
}
@end

最终输出结果子类打印和父类打印相同,总结:

  • class: 获取方法调用者的类
  • superclass: 获取方法调用者的父类
  • super:super不是一个指针,super只是编译指示器

再来一个Demo:

@implementation SuperViewController
- (void) methodB{
    NSLog(@"Super methodB.");
}
- (void) methodA{
    NSLog(@"Super methodA.");
    [self methodB];
}
@end
///////////////////////////////////////////////////////
@implementation SubViewController
- (void)viewDidLoad {
    //......
    [super methodA];
    [self methodA];
}
- (void) methodB{
    NSLog(@"Sub methodB.");
}
- (void) methodA{
    NSLog(@"Sub methodA.");
}
@end
  • 输出结果:
Super methodA.
Sub methodB.
Sub methodA.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,785评论 1 6
  • 姑娘,婚姻不应该将就 文/水灵儿 那天我快下班时,小兰打来电话说她在上岛咖啡让我过来。 小兰是我邻家小妹,从小就姐...
    Rrl水灵儿阅读 3,025评论 0 1
  • 今天在环绕大理洱海时,发现一家未开业的酒店正位于机场路的反弓位。当汽车通过这个路段时,车子所产生的冲击波、躁音和P...
    叶柏辉阅读 4,231评论 0 0
  • 文/新鲜 2017年5月1日共读第一次打卡 收获的内容: 第一章:阅读的活力与艺术 阅读层次:主动阅读。主动阅读的...
    新鲜wendy阅读 1,677评论 0 0
  • 一到周六的晚上就像咳了药 怎么也不太想那么早睡 不管是我开心还是不开心 一晚上的哔哩啪啦吐槽也解不了心中莫名的躁动...
    ab2d4333ea87阅读 910评论 0 1