【读书笔记】iOS6编程实战 10错误处理

来源:互联网 发布:js shift 编辑:程序博客网 时间:2024/05/18 03:57

在OC中卫内存分配错误编写错误处理代码几乎是没有意义的。

另一个类似的是采用断言,它在遇到错误时候会抛出一个NSInternalInconsistencyException异常,该异常默认会导致程序崩溃。忽略数组超出有效值的缩影是一种糟糕事情,让程序崩溃时一个更好的选择。

程序崩溃不是最坏的事情,脏数据才是最坏的结果。

1,断言

使用断言可以有效地防止程序错误。断言要求程序中特定的语句必须为真。如果不为真,说明程序正处于一种无法预测的运行状态,这时候就不该继续了。在Mac中,出现异常只结束当前循环。而iOS中,在哪个线程发生异常,默认行为都是调用abort结束整个程序。

可以在编译设置面板的“Preprocessor Macros”中设置NS_BLOCK_ASSERTIONS以禁用NSAssert。建议发布版本禁用断言。(书152页有个关于断言开关的宏定义)

2,异常

Coco框架通常不是异常安全的。异常只用来处理程序员发的错误,程序捕获到这种异常之后应该尽快退出运行。

异常是用来处理那些永远不应该发生却发生错误的。OC对@throw和@catch这些异常指令支持,但是不建议使用。

在OC中,ARC默认情况下不是异常安全的,有可能因为异常而产生严重的内存泄露。理论上说,OC++中ARC是异常安全的,但是@autoreleasepool块仍然可能导致后台线程发生内存泄漏。使用异常安全的ARC会导致性能下降,这也是应该避免大量使用OC++的原因之一。

3,错误和NSError

在iOS中分配小块内存失败应该视为程序错误。用户错误和环境错误不应该抛出异常,应该返回错误信息。通常是用NSError返回错误信息。例如NSFileManager。

错误对象主要包含错误域和错误代码,后者是一个整型值,前者是一个详细说明错误含义的字符串。

0 0
原创粉丝点击