0

我对在目标 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;
}
4

2 回答 2

2

大多数 Objective-C 对象最终都源自 NSObject,但您尝试初始化的对象很可能是其他对象的子类。例如,您的子类 FarhanViewController 将从 UIViewController 子类化,从 UIResponder 子类化,最终从 NSObject 子类化。

在对象的 init 方法中调用 " [super init]" 允许基类初始化它需要设置的任何其他内容,以便正确完成它的工作。

您还可以在此 Apple 文档中找到一些更有用的信息:“Multiple Initializers and the Designated Initializer”

于 2013-09-15T09:44:06.463 回答
0

简短的版本是,如果没有指定的初始化程序,我不知道如何正确地对您的类进行子类化。

假设您定义了一个Fruit类,而我想定义一个Apple.

我应该用自己的init方法调用什么?我应该打电话initWithTastiness:吗?简单init吗?我不知道。

使用指定的初始化器,我的子类确切地知道要创建一个 new Fruit,并且您知道您的类将永远不会(有效地)在没有初始化的情况下被调用,从而允许不变量等保持。

于 2013-09-15T09:46:22.873 回答