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

Nir*_*raj 13 objective-c ios

NSAssert Vs的主要用途是什么?NSException.什么是更推荐的,什么时候?

tro*_*foe 20

断言通常仅在开发期间使用,并且在处于发布模式时由应用程序编译出来(由此控制NS_BLOCK_ASSERTIONS).另一方面,例外情况可以随时使用.

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

断言实际上是一个运行时开发人员检查,确保某些东西(通常是一个实例变量)处于某种状态,如果不是,那么abort()为了将问题引起开发人员的注意.这是一个开发人员健全性检查,以检查某些东西是否处于开发人员期望的状态.


Tro*_*ott 7

断言用于查找在任何情况下都不应该发生的事情,如果您的代码按照您认为应该的方式工作.如果它们正在发生,那么您的代码中存在一个错误,您希望了解它,至少在测试期间是否会发生这种错误.(大多数人在发布的代码中关闭断言.)

相反,异常用于查找您无法控制的错误.例如,如果您的应用程序依赖于数据库服务器并且该数据库服务器不可用,则可能会在您的代码中引发异常.(不要误以为用户输入验证之类的事情使用例外.如果是常规程序流 - 用户忘记输入字段或其他 - 这不是例外.例外应该是例外.)