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

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

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对象中,经由“输入输出”返回给调用者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值