iOS 异常处理 及 try/try!/try?区别 及理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 异常处理 及 try/try!/try?区别 及理解相关的知识,希望对你有一定的参考价值。

参考技术A 在开发过程中,我们可能会在某些情况下自定义抛出异常,让用户或者开发者捕捉到提示,便于我们的开发及维护
如何自定义异常呢?
首先我们需要自定义一个ErrorInfo机构体,继承于Error,并在结构体中加入我们想抛出的异常信息

然后我们可以进行实例化异常对象,将自定义的异常信息抛出

swift的异常是可以传递的,在不需要进行异常处理的方法中,我们只需将异常进行抛出即可,直至处理异常的方法,在抛出异常的方法声明时,我们需加入throws关键词

可以这么理解。
异常就是一个炸弹,在某种情况下,first会生产出炸弹,但是他不处理,通过声明方法的时候的throws关键字,来对外表达,我这里会生成炸弹哦,然后second因为也声明了throws,所以他可以继续不处理(当然也可以处理),使用try调用first,如果first抛出了炸弹,他就可以继续抛下去,而third没有声明throws,所以,在third方法中,就必须用do-catch把炸弹解决掉了
throws:关键词的作用,就是告诉外面,我这里可能会抛出异常,没有throws,就必须把方法内的异常用do-catch处理掉
try:相当于一个异常处理工具(不同作用见下面“try/try!/try?区别”),可以传递或者简单处理掉异常
do-catch:相当于一个安全拆弹器,如果方法中抛出异常,我们就在catch中将异常安全的处理掉。

为啥 iOS 开发中很少用到 try catch 语句

参考技术A 简单的来说,Apple虽然同时提供了错误处理(NSError)和异常处理(exception)两种机制,但是Apple更加提倡开发者使用NSError来处理程序运行中可恢复的错误。而异常被推荐用来处理不可恢复的错误。
因为try catch无法捕获UncaughtException,而oc中大部分crash如:内存溢出、野指针等都是无法捕获的,而能捕获的只是像数组越界之类(这真心需要catch么?),所以try catch对于oc来说,比较鸡肋。本回答被提问者和网友采纳

以上是关于iOS 异常处理 及 try/try!/try?区别 及理解的主要内容,如果未能解决你的问题,请参考以下文章

异常处理及测试

Java中使用try-catch-finally处理IO流中的异常

异常及处理

在公有方法中,用try/catch块捕获异常,该异常的类型是啥?(php)

JavaSE知识-19(异常&IO(File类))

Java学习笔记之三十三详解Java中try,catch,finally的用法及分析