Obj-C: NSError в инициализаторе - PullRequest
7 голосов
/ 25 марта 2012

Довольно простой вопрос:

У меня в классе есть метод init, который может пойти не так.Если это произойдет, я планирую «вернуть ноль», но я также хотел бы вернуть ошибку.Это плохая практика иметь параметр NSError ** для метода init?Моя декларация метода будет выглядеть так:

- (id) initWithArgs:(NSString*) args andError:(NSError**)error;

Большое спасибо, Ник

1 Ответ

7 голосов
/ 25 марта 2012

Это необычно, но я не думаю, что это обязательно плохая практика. Я бы назвал вторую часть метода просто «error» вместо «andError:». Вам не нужно связывать части имени метода с 'и', и в этом случае также создается впечатление, что ошибка используется для инициализации объекта. Просто сделайте это:

- (id) initWithArgs:(NSString*) args error:(NSError**)error;

Кроме того, не забудьте освободить выделенный объект, если вы планируете вернуть что-то еще (например, nil):

- (id) initWithArgs:(NSString*) args error:(NSError**)error
{
    if ((self = [super init])) {
        if (canInitThisObject) {
            // init this object
        }
        else {
            [self release];
            self = nil;
            if (error != nil) {
                *error = [NSError errorWithDomain:someDomain code:someCode: userInfo:nil];
            }
        }
    }
    return self;
}
...