美文网首页iOS之Objective-C基础
iOS开发OC之super关键词

iOS开发OC之super关键词

作者: geekMole | 来源:发表于2016-03-29 20:08 被阅读799次

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.

相关文章

网友评论

    本文标题:iOS开发OC之super关键词

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