Когда вы запускаете self = [super init] и он возвращает nil, каков правильный ответ? - PullRequest
3 голосов
/ 29 августа 2011

Я запускаю этот код в экземпляре класса may:

-(id)init {
    self = [super init];
    if (self) {
        // my init code here
    }
    return self;
}

... и self возвращает nil.Я ЗНАЮ, что это правильная процедура и должна быть сделана.Но если я должен был вернуть ноль, каким должен быть мой ответ?Выдает предупреждение о том, что программа завершилась неудачно и завершается?Игнорируй это ?Или есть рекомендуемая процедура для безопасного продолжения?

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Я знаю, это звучит рекурсивно, но я думаю, что в этом случае лучше всего вернуть ноль.

Вы не можете предсказать состояние объекта при получении значения nil, возвращаемого инициализатором, поэтому самое безопасное - просто избавиться от объекта. Из инициализатора это означает просто возвращение nil вызывающей стороне.

При выделении] инициации мне всегда казалось, что эта ситуация приведет к утечкам, поэтому я всегда колебался просто вызывать выделение] инициации] вслепую.

2 голосов
/ 29 августа 2011

Я никогда не видел, чтобы это случилось лично. Но поскольку objc так хорошо справляется с nil, я не буду беспокоиться о том, чтобы иметь особые случаи сверх того, что вы уже делаете, возвращая ноль, полученный вами от super.

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