super,superClass,class

本文深入探讨了Objective-C与Swift在iOS开发领域的应用差异,包括历史背景、语法特性、社区生态、性能表现及未来趋势。通过对比分析,帮助开发者做出更适合项目需求的技术选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

研究super,superClass,class:

1.首先定义两个类,SubPerson继承Person;

2.在Person中声明一个方法(没有实现):

@interface Person : NSObject
- (void)test;
@end

3.在SubPerson中实现test方法:

- (void)test
{
     NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);

}

问题是四个输出各是什么?

4.在viewController中:

//创建一个子类对象,调用test方法;

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    SubPerson *subP = [[SubPerson alloc] init];
    [subP test];
}
@end

这里请注意,在第3步中会输出什么呢?

NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);
 1>首先分析一下self,谁调用test,则self就是谁,viewController中是SubPerson调用,所以self是SubPerson;
 2>class是求其类型;
 3>superclass是求其父类的类型;
 4>super是什么意思呢?
      --super不是一个指针,仅仅是一个编译指示器;
      —super仅仅是让当前对象调用父类的方法,调用者还是当前对象self;

结论:第3步中的输出分别是:SubPerson,Person,SubPerson,Person;

问题升级:
如果现在在Person中实现test方法:

@implementation Person
- (void)test
{
     NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);

}
@end

而在SubPerson中的test方法修改为:

@implementation SubPerson
- (void)test
{
    [super test];
}
@end

则输出Person的test方法中输出会是什么呢?

分析:方法中的self的意思是谁调用当前方法,self就是谁,又在Person中的test方法任然是SubPerson在调用,所以self还是SubPerson,类推,super还是SubPerson,即输出还是:SubPerson,Person,SubPerson,Person;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值