美文网首页
《Effective Objective-C 2.0 》 阅读笔

《Effective Objective-C 2.0 》 阅读笔

作者: dibadalu | 来源:发表于2016-03-19 20:12 被阅读40次

第21条:理解Objective-C错误模型

异常安全

ARC在默认情况下并不是“异常安全的”(exception safe),要想生成“异常安全”的代码可以通过设置编译器的标志(-fobjc-arc-exceptions)来实现。

但是,现在Objective-C语言只有在极其罕见的情况抛出异常,抛出异常之后,无须考虑恢复问题,而且应用程序此时也应该退出。这就是说,不用再编写复杂的“异常安全”代码了。

针对各种错误的处理方式

  • 严重错误:抛出异常,例如,编写了某个抽象基类,如果有人直接使用这个抽象基类,那么就抛出异常。
  • 其他错误:令方法返回nil/0,或是使用NSError,以表明其中有错误发生。例如,如果初始化方法无法根据传入的参数来初始化当前实例,那么就可以令其返回nil/0。

NSError对象

经NSError对象,可以把导致错误的原因回报给调用者。
NSError对象里会封装3条信息:

  • Error domain:错误范围,其类型为字符串。通常用一个特有的全局常量来定义。
  • Error code:错误码,其类型为整数。通常定义为枚举类型。
  • User info:用户信息,其类型为字典。

*** NSError的常见用法 ***

  • 通过委托协议来传递此错误。有错误发生时,当前对象会把错误信息经由协议中的某个方法传给其委托对象(delegate)。
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    
  • 经由方法的“输出参数”返回给调用者。
    - (BOOL)doSomething:(NSError**)error
    
    传递给方法的参数是个指针,而该指针本身又指向另外一个指针,那个指针指向NSError对象。或者也可以把它当成一个直接指向NSError对象的指针。

要点

  • 只有发生了可使整个应用程序崩溃的严重错误时,才应使用异常。
  • 在错误不那么严重的情况下,可以指派“委托方法”(delegate method)来处理错误,也可以把错误信息放在NSError对象里,经由“输出参数”返回给调用者。

相关文章

网友评论

      本文标题:《Effective Objective-C 2.0 》 阅读笔

      本文链接:https://www.haomeiwen.com/subject/dvbhlttx.html