热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS开发关于Super的题目

下面的程序会输出什么?implementationSon:Father-(id)init{self[superinit];if(self){NSLog(”

下面的程序会输出什么?

@implementation Son : Father
- (id)init
{
self = [super init];
if (self)
{
NSLog(@”%@”, NSStringFromClass([self class]));
NSLog(@”%@”, NSStringFromClass([super class]));
}
return self;
}
@end

答案:两句输出语句均输出:Son

为什么? 简单来说,self和super都是指向当前实例的,不同的是,[self class]会在当前类的方法列表中去找class这个方法,[super class]会直接开始在当前类的父类中去找calss这个方法,两者在找不到的时候,都会继续向祖先类查询class方法,最终到NSObject类。 由于我们在Father和Son中都没有去重写class这个方法,最终自然都会去执行NSObject中的class方法,结果也自然应该是一样的。 至于为什么是Son,我们可以看看NSObject中class的实现:

-(Class)class
{
return object_getClass(self);
}

这就说的通了,返回的都是self的类型,self此处正好就是Son,因此结果就会输出Son



推荐阅读
author-avatar
手机用户2502887185
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有