首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实际上,NSAssert有什么意义呢?

实际上,NSAssert有什么意义呢?
EN

Stack Overflow用户
提问于 2009-09-03 20:33:17
回答 7查看 70.4K关注 0票数 155

我必须这样问,因为:我唯一认识到的是,如果断言失败,应用程序就会崩溃。这是使用NSAssert的原因吗?或者它还有什么好处呢?将NSAssert放在我在代码中所做的任何假设之上是正确的吗,比如一个函数永远不应该将-1作为参数,而可能是-0.9或-1.1?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-03 20:39:13

断言是为了确保一个值是它应该是的值。如果断言失败,这意味着出了问题,因此应用程序退出。使用assert的一个原因是,如果你有一些函数不会运行,或者会产生非常糟糕的副作用如果传递给它的一个参数不是确切的某个值(或一个值的范围),你可以放一个assert来确保这个值是你期望的值,如果不是,那么一定是什么东西真的出错了,所以应用程序退出。Assert对于调试/单元测试非常有用,当您提供框架来阻止用户做“邪恶”的事情时也是如此。

票数 300
EN

Stack Overflow用户

发布于 2009-09-03 21:01:54

除了上面每个人所说的,NSAssert()的默认行为(与C的assert()不同)是抛出一个异常,您可以捕获和处理该异常。例如,Xcode就是这样做的。

票数 17
EN

Stack Overflow用户

发布于 2010-09-23 00:02:11

只是为了澄清一下,正如有人提到但没有完全解释的那样,拥有和使用断言而不是仅仅创建自定义代码(例如,执行if并为坏数据引发异常)的原因是,应该为生产应用程序禁用断言。

在开发和调试时,可以使用断言来捕获错误。当assert被评估为false时,程序将暂停。但是,在为生产环境进行编译时,编译器省略了断言代码,实际上会使程序运行得更快。到那时,希望你已经修复了所有的bug。如果您的程序在生产过程中仍然有bug(当断言被禁用并且程序“跳过”断言时),您的程序很可能会在其他某个时刻崩溃。

来自NSAssert的帮助:“如果定义了预处理器宏NS_BLOCK_ASSERTIONS,则禁用断言。”因此,只需将宏放入您的分布目标中即可。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1375786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档