最近,我读到了两条非常有趣的建议:
- 在评论中这个 StackOverflow 答案 https://stackoverflow.com/questions/1375786/whats-the-point-of-nsassert-actually/1375819#1375819,@Mike Weller 说将你的断言保留在生产代码中......性能影响到底是什么?有什么理由不把它们留在里面吗?
- In 文森特·盖博的博客 http://vgable.com/blog/2008/12/04/nsassert-considered-harmful/,他说你应该更喜欢
assert
over NSAssert
...有什么理由不使用assert
? (字母少了:))
回答你的两个问题:
保留断言对性能影响很小,除非断言中的实际操作非常耗时(例如assert([obj calculateMeaningOfLife] == 42)
)。断言应该与额外的没有什么不同if
声明,性能方面。在发布版本中删除断言的原因是它们本质上是一种调试工具——它们在运行时捕获不一致的内部程序状态。从开发人员的角度来看,应用程序一旦出现问题就崩溃会好得多,但从用户的角度来看,如果应用程序不崩溃,可以说不那么烦人(除非让应用程序以异常状态运行导致发生可怕的事情) ),并且在错误消息中暴露开发细节可能会令人反感。双方都有很好的论据——如果我没记错的话代码完成建议将它们去掉,但是务实的程序员建议保留它们。在任何情况下,断言都不能替代正确的错误处理,并且只能用于编程错误。
之间的基本区别NSAssert
和一个常规的assert
那是一个NSAssert
当失败时引发异常assert
只是使应用程序崩溃。NSAssert
还可以让您提供更精美的错误消息并记录它们。实际上,我真的不认为两者之间有太大区别——我想不出处理断言抛出的异常的理由。 (我认为是为了吹毛求疵NSAssert
通常需要较少的打字,因为您不必包含assert.h
,但这既不在这里也不在那里。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)