以下是代码:
@implementation Accumulateur
// Constructor
- (id) init
{
return ([self initWithTotal:0]);
}
- (id) initWithTotal:(int)aTotal
{
AccumulateurMoyen *ac;
if ((ac = [[AccumulateurMoyen alloc] init]) == nil)
{
[self release];
return (nil);
}
return ([self initWithTotal:aTotal andAccumulateurMoyen:ac]);
}
- (id) initWithTotal:(int)aTotal
andAccumulateurMoyen:(AccumulateurMoyen *)aAcMoyen
{
if (self = [super init])
{
[aAcMoyen retain];
[acMoyen release];
acMoyen = aAcMoyen;
total = aTotal;
}
return (self);
}
@end
问题在于:if ((ac = [[AccumulateurMoyen alloc] init]) == nil)
当我重新定义init
时,被调用的init
是我的,而不是NSObject
...
我不知道如何正确地做到这一点(AccumulateurMoyen
是Accumulateur
的子类)
你好
答案 0 :(得分:1)
你可能在那里有不受欢迎的递归:[[AccumulateurMoyen alloc] init]
尝试创建新的AccumulateurMoyen
,但这会导致嵌套的initWithTotal:
再次尝试创建另一个AccumulateurMoyen
实例等。
即。您的代码尝试创建Accumulateur
,其成员acMoyen
设置为AccumulateurMoyen
的新实例,其acMoyen
又设置为AccumulateurMoyen
的另一个新实例等
你必须打破无休止的递归。例如。在initWithTotal:
中,替换
if ((ac = [[AccumulateurMoyen alloc] init]) == nil)
与
if ((ac = [[AccumulateurMoyen alloc] initWithTotal:0 andAccumulateurMoyen:nil]) == nil)
即。嵌套的AccumulateurMoyen
将其成员设置为nil
。
答案 1 :(得分:0)
很抱歉,但我认为你的结构存在问题。为什么你的超类需要引用一个扩展它的类?我认为你最好的选择是再考虑一下你的班级结构。
但是在你的subClass中你可以改变init方法,这样你的问题就会消失。
(id)init {
return ([NSObject init]);
}