【发布时间】:2011-07-03 10:28:48
【问题描述】:
我想在不破坏继承链的情况下调用超类的超类方法。像这样的:
+(id) alloc
{
return [super.super alloc];
}
有没有办法做到这一点?
不要与superclass 方法提供的行为混淆,讨论here。
UPD:
说说super 和superclass 的区别。
可以说,我们有 AClass 和 SuperAClass。如下从他们的名字AClass继承SuperAClass。他们每个人都有一个方法的实现-(void) foo;
AClass 实现了一种以下类方法:
1.超类:
+(id) alloc {
return [[self superclass] alloc];
}
2。超级:
+(id) alloc {
return [super alloc];
}
现在,假设这两行代码:
AClass *AClassInstance = [AClass alloc];
[AClassInstance foo];
在第一种情况下(使用超类),SuperAClass 的foo 方法将被调用。
对于第二种情况(使用super),会调用AClass的foo方法。
【问题讨论】:
-
#1:我相信您已经将示例的标题(1. super,2. superclass)与实际代码混为一谈。
-
#2:
AClass AClassInstance = [AClass alloc];无效,因为 Objective-C 对象必须存在于堆上,因此在其声明中需要指针。 -
#3:你不能发送
[AClassInstance foo],因为AClassInstance不是一个类,+foo是一个类方法。 -
#4:
alloc是一个类方法,因此+ (id)alloc -
您应该将
solution移到答案中(不在问题区域内)。(a) 很难找到/阅读,(b) 允许人们对解决方案进行投票。还有更多 StackOverflow 方式 :)
标签: objective-c cocoa cocoa-touch ios