面试题答案
一键面试异常处理和错误处理的区别
- 本质
- 异常处理:主要用于处理程序运行过程中出现的不可预期且严重的错误情况,它会导致程序流程的大幅改变,通常会使栈展开,终止当前的执行路径。例如,访问已释放的内存等严重问题。
- 错误处理:用于处理预期内可能发生的错误,这些错误一般不会导致程序的严重崩溃,通过适当处理可以让程序继续执行。比如文件读取失败,网络连接中断等情况。
- 性能影响
- 异常处理:由于需要展开栈等操作,性能开销较大。
- 错误处理:性能开销相对较小,它只是简单地返回错误信息,程序可以根据这些信息进行相应调整。
- 代码结构
- 异常处理:使用
@try
、@catch
、@finally
等块来捕获和处理异常,代码结构相对复杂,特别是当嵌套层次较多时。 - 错误处理:一般通过函数返回值或NSError对象来传递错误信息,代码结构相对清晰,易于理解和维护。
- 异常处理:使用
优先使用异常处理的场景及原因
- 场景:内存管理错误、未识别的消息发送等严重且不可恢复的错误场景。例如,在对象已经释放后再次向其发送消息,导致
EXC_BAD_ACCESS
错误。 - 原因:这类错误一旦发生,程序状态已严重受损,继续执行可能导致更严重的后果,使用异常处理可以快速终止当前错误的执行路径,避免错误进一步扩散,同时可以在
@catch
块中进行一些必要的清理操作,如释放资源等。
优先使用错误处理的场景及原因
- 场景:文件操作、网络请求等可预期的错误场景。比如在读取文件时,文件可能不存在;在进行网络请求时,可能网络连接中断。
- 原因:这些错误是可以预期的,并且程序有可能通过适当的处理(如提示用户重新操作、重试网络请求等)继续运行。使用错误处理方式,程序可以根据具体的错误信息进行针对性处理,而不会因为一个小错误就终止整个程序的运行,保证了程序的健壮性和用户体验。例如,在文件读取失败时,可以提示用户文件不存在,是否要创建新文件等。