iphone - objective-c 中的错误处理与异常处理

标签 iphone objective-c exception-handling error-handling

我无法理解应该使用错误处理或异常处理的地方。我假设这一点,如果它是一个现有的框架类,则有委托(delegate)方法可以方便程序员发送错误对象引用并在此之后处理错误。异常处理适用于使用某些框架类的程序员的操作引发错误并且我无法修复错误对象引用的情况。

这个假设有效吗?或者我应该如何理解它们?

最佳答案

如果程序员已经检查了引发异常的方法的参数,那么您应该对永远不会出现的错误使用异常。例如。除以 0 或您从 NSArrays 获得的众所周知的“越界”异常。

NSErrors 是针对程序员无能为力的错误。例如。解析 plist 文件。如果程序在尝试读取其内容之前检查文件是否是有效的 plist,那将是一种资源浪费。对于有效性检查,程序必须解析整个文件。解析一个文件以报告它是有效的,这样你就可以再次解析它,这完全是浪费。因此,如果无法解析文件,该方法将返回 NSError(或者只是 nil,它会告诉您出现问题)。

有效性解析是“程序员应该检查参数”部分。它不适用于此类错误,因此您不会抛出异常。

理论上,您可以用 return nil 替换越界异常。 .但这会导致非常糟糕的编程。

Apple说:

Important: In many environments, use of exceptions is fairly commonplace. For example, you might throw an exception to signal that a routine could not execute normally—such as when a file is missing or data could not be parsed correctly. Exceptions are resource-intensive in Objective-C. You should not use exceptions for general flow-control, or simply to signify errors. Instead you should use the return value of a method or function to indicate that an error has occurred, and provide information about the problem in an error object.

关于iphone - objective-c 中的错误处理与异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5295609/

相关文章:

objective-c - 如何将可变数量的参数传递给可变参数函数

ios - 将 UITableView 导出为 PDF

spring-mvc - spring-boot自定义404错误页面

ios - 应用程序因不遵循 iOS 数据存储指南而被拒绝

iphone - 使 UIViewController 中的 NSTimer 无效以避免保留周期的最佳时间

ios - UIDeviceBatteryLevelDidChangeNotification 后台通知?

python - 如何在 Python 中获取完整的异常堆栈跟踪

c++ - 如何通过运行时类型抛出异常?

iphone - Windows 上使用 FFmpeg 的多比特率实时 HLS

iphone - 推送通知徽章不来