Tom*_*Tom 5 error-handling exception objective-c ios
我了解到Objective C有一种处理异常的方法,比如.NET中的C#.此外,正如apple docs所说,我想处理/处理异常,创建一个NSError对象.仔细查看文档异常处理中的"捕获不同类型的异常"部分
....我想抓住不同类型的例外.在.NET中,我习惯于浏览类方法的doc,以获得它可能引发的异常.哪里可以从apple-docs获取这些信息?我如何知道-method/object/process-可以引发什么样的异常?
谢谢你的建议
汤姆
正如Apple的文档所述,大多数异常都是在特殊情况下引发的.(有些例外不是,比如从NSArray边界访问对象.)
.NET鼓励本地异常处理.编写Cocoa是为了鼓励大范围的异常处理.您在.NET中进行本地异常处理的原因是您希望某些部分以预期的方式失败(例如下载内容时出现网络错误).在Cocoa中,这是通过使用返回NSErrors的方法来处理的.它是一样的,只在方法签名中更明显.
一个好的经验法则是Cocoa只会在你不清楚如何恢复的情况下抛出异常.(不要误以为这是因为.NET中的异常被抛出而且很难处理.)
Objective-C世界中的错误处理可能与您习惯的完全不同.简而言之,忘记例外.大多数错误由返回值处理或通过将指针传递给NSError*:
NSErrror *error = nil;
BOOL success = [somebody doSomethingWithError:&error];
if (!success) {
NSLog(@"Got error: %@", error);
}
Run Code Online (Sandbox Code Playgroud)
而在被叫方:
- (BOOL) doSomethingWithError: (NSError**) error
{
error = error ? error : &(NSError*){ nil };
if (somethingWentWrong) {
*error = [NSError …];
return NO;
}
// All is fine
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这看起来很麻烦,但在实践中它大部分工作正常.在极少数情况下,某些事情确实会引发异常(如[NSFileHandle writeData:]),文档提到了这一事实,但我认为您不会像其他语言中的习惯那样分析异常.
| 归档时间: |
|
| 查看次数: |
4816 次 |
| 最近记录: |