Я читал этот вопрос и не понимаю, с какой проблемой он сталкивается. почему инициализация подклассов требует вызова той же самой функции инициализации суперкласса?
Из того, что я прочитал и понял.Каждый класс будет иметь свой собственный инициализатор.В этом случае, если у класса есть несколько инициализаторов.Допустим, у меня есть класс "Shape.h", подобный этому.
- (id) init
{
return [self initWithHeight: 0];
}
- (id) initWithHeight: (int) h
{
return [self initWithHeight:h withWidth:0];
}
- (id) initWithHeight: (int) h withWidth: (int) w
{
if(self = [super init]); //since the superclass is NSObject, I use init as designated initializer
{
[self setHeight:h];
[self setWidth:w];
}
return self
}
И я подклассов нового класса с именем "Rectangle.h" из класса "Shape.h".Поскольку у меня есть «Shape.h», обозначенный как «- (id) initWithHeight: (int) h иWitdh: (int) w», это означает, что мне нужно будет использовать его для [super init] в «Rectangle.h»."класс верно?Это стало так.
- (id) initWithHeight: (int) h withWidth: (int) w
{
return [self initWithHeight: h withWidth: w withColor:nil];
}
- (id) initWithHeight: (int) h withWidth: (int) w withColor: (NSString *) c
{
if(self = [super initWithHeight:h andWidth:w])
{
[self setHeight:h];
[self setWidth:w];
[self setColor:c];
}
return self;
}
В "Rectangle.h" я перезаписываю супер (который называется Shape.h), обозначенный init, и настраиваю его для соответствия классу, обозначенному "Rectangle.h".Является ли этот способ работы правильным и не вызывает зацикливание?Если это так, может кто-нибудь объяснить мне в опубликованной ссылке, почему он будет зацикливаться, если я использую [super init] без следования назначенному init суперклассу.
Извините, если я вызываю какую-либо путаницу.Я не могу хорошо понять концепцию.