在Objective-C中,NSAssertion
用於仔細檢查代碼中的假設 - 斷言只會失敗,因爲您在代碼中犯了錯誤,而不是因爲無效參數或意外情況。
NSException
被用於諸如無效的參數等,因此是你在說什麼更適合(但測試它的外面是沒有標準的做法,@catch
一個NSException
並繼續執行:你會,而不是僅僅做終止前的一些錯誤報告)。
下面是你在你的情況下使用NSException
。首先,如下改變someMethod:
:
- (void) someMethod:(NSString*)param {
if (param == @"0") {
[NSException raise:@"Invalid param value" format:@"param of 0 is invalid"];
}
// more code
}
然後當你調用someMethod:
@try {
[yourObject someMethod:@"0"];
}
@catch (NSException *exception) {
NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);
}
@finally {
//any code that should be executed whether or not the exception is raised
}
基於您的評論,我想你會想設置一些種類標誌在@catch
塊,如果該標誌沒有被設置(即,沒有拋出異常),然後終止。
P.S.只是你知道,對於在正常程序執行期間想要反應錯誤的情況(與測試相反),NSError
更具慣用性。
謝謝,NSException和「@try @catch @finally」的結合很好地完成了這項工作。 –