博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS OC 异常处理
阅读量:6164 次
发布时间:2019-06-21

本文共 1679 字,大约阅读时间需要 5 分钟。

  hot3.png

一 简述

    自动引用计数 ARC 默认情况下不是"异常安全的",具体来说,如果抛出异常,那么本应在作用域末尾释放的对象现在却不能自动释放,如果想生成"异常安全"的代码,可以通过设置编译器的标志实现,不过这将引入一些 额外的代码,在不抛出异常时,也照样要执行这部分代码,需要打开的编辑器标志叫做-fobjc-arc-excepitons.

    OC 语言现在采用的办法是,只有在严重的情况下抛出异常,异常抛出之后,无需考虑恢复问题,而且运用程序此时应该退出,这就是说,不用编写复杂的"异常安全"代码了

    异常用于处理严重的错误,非致命的错误,OC采用的编程范式为:令方法返回nil/0,或是使用NSError,表明其中有错误发送。

    例如:初始化方法无法根据传入的参数来初始化当前实例,那么就可用令其返回nil/0:

-(id)initWithValue:(id)value{    if((self = [super init])){        if( /*Value means instance can’t be created */ ){            self = nil;        }else{            //initialize instance        }    }    return self;}

二 NSError 使用

NSError 用法更灵活,经由此对象昂,可以把导致错误的原因回报给调用者。

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

    错误发生的范围,也就是产生错误的原因,通过用一个特有的全局变量来定义,比方说,“处理URL的子系统”(URL-handling subsystem)在从URL中解析或取得数据时如果出错了,就会使用NSURLErrorDomain来表示错误范围

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

    独有的错误代码,用于指明在某个范围内具体发生了何种错误,某个特定范围内可能会发生一系列相关错误,这些错误情况通常采用 enum来定义,例如,当HTTP请求出错时,可能会把HTTP状态码设为错误码

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

    有关此错误的额外信息,其中或许包含一段“本地化的描述”或许海包含有导致该错误发生的另外一个错误,经由此种信息,可将相关错误串成一条错误连(chain of errors)

2.1 NSError通过委托对象传递错误

    在设计API 时,NSError 经常通过委托协议来传递错误,当错误发生时,当前对象会把错误信息经由协议中的某个方法传给其委托对象。例如,NSURLConnection 在其委托协议NSURLConnectionDelegate 之中就定义了如下方法:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;

    当NSURLConnection 出现错误时,就调用该方法处理。改方法不一定要实现,由程序员自己判断

2.2 NSError 作为方法输出参数 

    NSError 的另一常见用法是:作为方法的"输出参数"返回给调用者。

-(BOOL)doSomething:(NSError *)error

    

    传递给方法的参数是个指针,而该指针本身有指向NSError 对象,可以把 输出参数 NSError 对象回传给调用者。

NSError *error = nil;BOOL ret = [object doSomething:&error];if(error){    //there was an error}

三 总结

  • 只有发生了可是整个运用程序崩溃的严重错误时,才应使用异常

  • 在错误不那么严重的情况下,可用指派“委托方法”来处理错误,也可用把错误信息放在NSError 对象里,竟有“输出参数”返回给调用者 

转载于:https://my.oschina.net/wolx/blog/476764

你可能感兴趣的文章
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
深入python的set和dict
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
centos 下安装g++
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
centos64i386下apache 403没有权限访问。
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>