指定初始化程序的目的

时间:2013-09-15 09:37:45

标签: ios objective-c

我很困惑在目标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;
}

2 个答案:

答案 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>