в target-c является ли (self) {[self initFOO]} избыточным? - PullRequest
1 голос
/ 23 марта 2012

Я учусь на Stanford CS193P у Пола Хегарти.Затем я вижу что-то вроде этого, которое я также вижу, когда другие люди используют:

- (id)init
{
    self = [super init];
    if (self) {
        [self someSetupFunctions];
    }
    return self;
}

Разве это не избыточно?Почему бы просто не использовать:

- (id)init
{
    self = [super init];
    [self someSetupFunctions];
    return self;
}

Я думал, что сообщения до нуля просто падают, так почему бы не использовать этот второй формат?

Ответы [ 3 ]

5 голосов
/ 23 марта 2012

Возможно, вы захотите сделать что-то другое, кроме передачи сообщений себе.Например:

- (id)init
{
    self = [super init];
    if (self) {
        // set up ivars
        _anIvar = 5;
    }
    return self;
}
4 голосов
/ 23 марта 2012

Что на самом деле означает [self someSetupFunctions], так это некоторый код инициализации, а не просто вызов одного метода, и ряд важных вещей потерпит неудачу, если self равен нулю. В частности, попытка присвоить начальные значения переменным экземпляра приведет к сбою.

0 голосов
/ 23 марта 2012

Тест self = [super init]; if (self) состоит в том, что некоторые инициализаторы возвращают разные объекты, включая nil, если невозможно создать объект, удовлетворяющий условию, требуемому инициализатором.

В вашем собственном инициализаторе вам необходимоДелайте это, защищаясь от суперкласса, потому что если вы пытаетесь получить доступ к переменной экземпляра на nil, вы определенно делаете не то, что нужно (независимо от того, произойдет ли это в результате или нет: обычно это произойдет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...