NSAssert和NSException的主要用途是什么?

13

NSAssert和NSException的主要用途是什么?哪一个更被推荐,并在什么情况下使用?

2个回答

21

断言通常仅在开发过程中使用,并且在发布模式下从应用程序中编译出来(这由NS_BLOCK_ASSERTIONS控制)。 另一方面,异常可以始终使用。

当抛出异常时,它会沿调用链向上移动,直到它被捕获(并报告、忽略或抛出另一个异常)或达到顶部,在这种情况下,它将导致应用程序崩溃。它可以被视为类方法的合同的一部分,并需要记录文档,以便调用者可以正确处理它。

断言实际上是运行时开发人员检查,确保某些东西(通常是实例变量)处于某种状态,如果不是,则调用abort()以引起开发人员的注意。 这是开发人员的理智检查,以检查某些东西是否处于开发人员期望的状态。


7

断言用于查找在任何情况下都不应该发生的事情,如果您的代码按照您认为的方式工作。如果它们正在发生,则说明您的代码存在错误,并且您想知道这一点,至少在测试期间。 (大多数人在发布的代码中关闭断言。)

相反,异常用于查找您无法控制的出现了问题的事情。例如,如果您的应用程序依赖于数据库服务器,而该数据库服务器不可用,则可能会在您的代码中引发异常。 (不要犯将异常用于用户输入验证等事情的错误。如果是常规程序流程 - 用户忘记输入字段或其他内容 - 那就不是异常。异常应该是异常情况。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接