2012-03-24 4 views
7

Довольно простой вопрос:Obj-C: NSError в инициализаторе

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

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

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

ответ

7

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

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

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

- (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; 
} 
+1

Одна вещь, которую я рекомендовал бы ВСЕГДА установку ошибку nil в начале метода. Нет никакой гарантии, что вызывающий абонент будет обнулен. – EricS

+4

@EricS Нет причины устанавливать 'error' в' nil', если не возникнет ошибка. Вызывающий не должен смотреть на значение '@ error', если метод не возвращает' nil'. В противном случае это ошибка. @Caleb, который должен проверить код, чтобы убедиться, что 'error' не является NULL перед назначением' * error'. – bbum

+0

@bbum Спасибо - исправлено. – Caleb

 Смежные вопросы

  • Нет связанных вопросов^_^