您的位置:首页 > 移动开发 > Objective-C

编写高质量OC代码52建议总结:21.理解Objective-C的错误模型

2017-02-21 11:04 405 查看
"自动引用计数"在默认情况下不是异常安全的,具体说,如果抛出异常,本应该在作用于末尾释放的对象就不会释放了。

id someResource = @"";
if (someResource/* check for error */) {
@throw [NSException exceptionWithName:@"ExceptionName" reason:@"There was an error" userInfo:nil];
}
[someResource domain];
[someResource release];

在抛出异常前先释放someResource,可以解决问题。如果待释放的资源有很多,释放资源的代码就容易写的很乱。

     OC所采用的办法是,只在极其罕见的情况下抛出异常,异常抛出之后,无需考虑修复问题,应用程序此时应该直接退出。不在编写复杂的“异常安全代码了”。

     异常只用于处理严重错误。如果出现“不那么严重的错误”,OC令方法返回 0或者nil或者error,表示有错误发生。例如:初始化方法无法根据传入的参数来初始化当前实例,就令其返回nil或者0。

     

     

     NSError的用法更加灵活,我们可以把导致错误的原因报给调用者。

     Error domain(错误范围,其类型为字符串)

     --错误发生的范围。也就是产生错误的根源,通常用一个特有的全局变量来定义。例如:“处理URL的子系统”在从URL解析中获得数据时如果出错了,那么就会使用NSURLErrorDomain来表示错误范围。

     Error code(错误码,类型为整数)

     --独有的错误代码,用来指明具体发生了什么事故。某个特定范围内可能发生一系列相关的错误,通常用枚举定义这些错误。

     User info(用户信息,类型为字典)

     --错误的额外信息

     

     总结:

     1.只有发生了导致整个程序崩溃的错误时,才使用异常

     2.在错误不是很严重的情况下可以使用“委托方法”来处理错误,也可以把错误信息放在NSError对象中,经由“输入输出”返回给调用者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐