7
相當簡單的問題:Obj-C:初始化程序中的NSError
我在我的類上有一個可能出錯的init方法。如果是這樣,我打算「返回零」,但我也想返回一個錯誤。在init方法中有一個NSError **參數是不好的做法嗎?我的方法聲明是這樣的:
- (id) initWithArgs:(NSString*) args andError:(NSError**)error;
非常感謝, 尼克
相當簡單的問題:Obj-C:初始化程序中的NSError
我在我的類上有一個可能出錯的init方法。如果是這樣,我打算「返回零」,但我也想返回一個錯誤。在init方法中有一個NSError **參數是不好的做法嗎?我的方法聲明是這樣的:
- (id) initWithArgs:(NSString*) args andError:(NSError**)error;
非常感謝, 尼克
這是不尋常的,但我不認爲這是一個必然不好的做法。不過,我將這個方法的第二部分命名爲「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;
}
有一件事我會建議在設置總是錯誤在方法開始時爲零。無法保證來電者將其歸零。 – EricS 2012-03-25 00:54:31
@EricS除非出現錯誤,否則沒有理由將'error'設置爲'nil'。除非方法返回'nil',否則調用者不應該查看'@ error'的值。否則是一個錯誤。 @Caleb代碼需要檢查以確保'error'在分配給'* error'之前確保'error'是非NULL。 – bbum 2012-03-25 01:54:57
@bbum謝謝 - 修正。 – Caleb 2012-03-25 02:09:14