イニシャライザにこれがあるクラスがあります:
@implementation BaseFooClass
-(id) init
{
if (self = [super init])
{
// initialize instance variables that always need to start with this value
}
return self;
}
-(id) initWithSomeInt:(int) someInt
{
if (self = [self init]) // <-- I need to make sure that I am calling BaseFooClass's init here, not SubFooClass's, does that make sense?
{
self.someInt = someInt;
}
return self;
}
@end
それはすべて元気でダンディです。私の問題は、サブクラスを実装するときに次のことです。
@implementation SubFooClass
-(id) init
{
return [self initWithSomeInt:0];
}
-(id) initWithSomeInt:(int) someInt
{
if (self = [super init]) // <--- Infinite loop (stack overflow :) )
{
// initialize other variables
}
}
@end
基本的に、 「」ではなく「BaseFooClass
」を具体的に呼び出す必要があります。init
SubFooClass
init
プロジェクトをC#からiPadアプリケーションで使用するように変換しているため、オブジェクトの初期化方法を変更できません。
よろしくお願いします
編集:
誰かが尋ねたので、ここに私のヘッダーがあります:
@interface BaseFooClass : NSObject
// implicit from NSObject
// -(id) init;
-(id) initWithSomeInt:(int) someInt;
// more methods
@end
@interface SubFooClass : BaseFooClass
// implicit from NSObject
// -(id) init;
// implicit from BaseFooClass
//-(id) initWithSomeInt:(int) someInt;
@end