NSAssert Vs的主要用途是什么? NSException。什么是更推荐的,什么时候?
答案 0 :(得分:20)
断言通常仅在开发期间使用,并在处于发布模式时由应用程序编译出来(由NS_BLOCK_ASSERTIONS
控制)。另一方面,例外情况可以随时使用。
当抛出异常时,它会在调用链中向上移动,直到它被捕获(并报告,忽略或抛出另一个异常)或者它到达顶部,在这种情况下它会导致应用程序崩溃。它可以被认为是类方法的合同的一部分,需要记录,以便调用者可以正确处理它。
断言实际上是一个运行时开发人员检查,确保某些东西(通常是一个实例变量)处于某种状态,如果不是那么abort()
,以便将问题引起开发人员的注意。这是一个开发人员健全性检查,用于检查某些东西是否处于开发人员期望的状态。
答案 1 :(得分:7)
断言用于查找在任何情况下都不会发生的事情,如果您的代码按照您认为应该的方式工作。如果它们正在发生,那么您的代码中存在一个错误,您希望了解它,至少在测试期间是否会发生这种错误。 (大多数人在发布的代码中关闭断言。)
相反,异常用于查找您无法控制的错误。例如,如果您的应用程序依赖于数据库服务器并且该数据库服务器不可用,则可能会在您的代码中引发异常。 (不要误以为用户输入验证之类的事情使用例外。如果是常规程序流 - 用户忘记输入字段或其他 - 这不是例外。例外应该是例外。)