我很困惑在目标C中编写指定初始化程序的原因是什么。并且调用超类的init方法以便它覆盖它的超类的实现?
有人能解释创建此类方法的可能原因吗?
例如,
-(id)initWithCardCount:(NSUInteger)count usingDeck:(Deck *)deck // Designated Initialiser
{
self = [super init];
if(self)
{
for (int i = 0; i < count; i++)
{
Card *card = [deck drawRandomCard];
if(!card)
{
self = nil;
}else
{
self.cards[i] = card;
}
}
}
return self;
}
答案 0 :(得分:2)
大多数Objective-C对象最终都来自NSObject,但是您尝试初始化的对象可能会被其他对象所取代。例如,您的子类FarhanViewController将从UIViewController继承子类,该子类来自UIResponder,最终是NSObject。
在对象的init方法中调用“[super init]
”允许基类初始化其需要设置的任何其他内容,以便正确地完成它的工作。
您还可以在此Apple文档中找到更多有用的信息:"Multiple Initializers and the Designated Initializer"
答案 1 :(得分:0)
这个版本的简短版本是,如果没有指定的初始化程序,我不知道如何正确地为您的类创建子类。
假设你定义了一个Fruit
类,我想定义一个Apple
。
我应该在自己的init
方法中调用什么?我应该致电initWithTastiness:
吗?简单init
?我不知道。
使用指定的初始化程序,我的子类确实知道要创建新的Fruit
,并且您知道在没有初始化的情况下,您的类将永远(有效地)被调用,允许不变量等保持。 / p>