2012-03-24 48 views
7

相當簡單的問題:Obj-C:初始化程序中的NSError

我在我的類上有一個可能出錯的init方法。如果是這樣,我打算「返回零」,但我也想返回一個錯誤。在init方法中有一個NSError **參數是不好的做法嗎?我的方法聲明是這樣的:

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

非常感謝, 尼克

回答

7

這是不尋常的,但我不認爲這是一個必然不好的做法。不過,我將這個方法的第二部分命名爲「error」而不是「andError:」。您不需要將方法名稱的各個部分與'and'連接起來,在這種情況下,它也給出了錯誤正在用於初始化對象的印象。只是使它:

- (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

有一件事我會建議在設置總是錯誤在方法開始時爲零。無法保證來電者將其歸零。 – EricS 2012-03-25 00:54:31

+4

@EricS除非出現錯誤,否則沒有理由將'error'設置爲'nil'。除非方法返回'nil',否則調用者不應該查看'@ error'的值。否則是一個錯誤。 @Caleb代碼需要檢查以確保'error'在分配給'* error'之前確保'error'是非NULL。 – bbum 2012-03-25 01:54:57

+0

@bbum謝謝 - 修正。 – Caleb 2012-03-25 02:09:14