What is NSParameterAssert?
什么是NSParameterAssert?
有人能举例说明吗?
测试方法参数不是nil或非0是一种简单的方法。所以基本上,您使用它来创建一个前提条件,声明必须设置一些参数。如果未设置,宏将导致应用程序中止并在该行上生成错误。所以:
1 2 3 4 5 6
| - (void)someMethod:(id)someObjectThatMustNotBeNil
{
// Make sure that someObjectThatMustNotBeNil is really not nil
NSParameterAssert( someObjectThatMustNotBeNil );
// Okay, now do things
} |
预条件是确保程序员正确调用方法/API的简单方法。其思想是,如果程序员违反了前提条件,应用程序就会提前终止——希望在调试和基本测试期间。
但是,可以使用NSParameterAssert来测试任何表达式的计算结果是否为真,因此您也可以这样使用它:
1
| NSParameterAssert( index >= 0 ); // ensure no negative index is supplied |
Apple的nsParameterAssert()宏文档
- 类似于if()…thx
- 确保在代码中捕获异常,否则如果断言为真,它将使应用程序崩溃。
- @Senthilmuthu不完全像一个if语句。它们类似于可以对表达式进行计算,但if语句用于程序流控制,而nsParameterAssert,如jason coco的答案所解释的,将在计算结果为true时终止应用程序。如果声明不这样做。
- @Lucius:断言不用于检查分布式应用程序中的条件,它们在开发过程中会捕获错误。在不好的情况下(如笔尖的一个未连接的出口),导致某物崩溃,而不是默默地失败,可以让你尽早发现问题。许多人在发布时通过宏或ifdef禁用这些功能。
- @卢修斯-目的是使应用程序在不满足前提条件时中止。这会让程序员立即知道他/她做错了什么。为了确保不评估cocoa中的断言,可以定义ns_block_断言宏。这将禁用它们,但其思想是防止副作用或代码执行缓慢,而不是防止崩溃——通过生产,断言在正确使用时不应触发。
- 在进行生产构建时,是否可以以简单的方式删除这些断言?imho在开发期间最好使用这些来捕获编程错误(如上面的注释中所述)。
- @johankalsson是可能的,并且在当前版本的模板(这可以追溯到相当远)的Release配置中默认设置。您可以通过在Xcode的较新版本中设置ENABLE_NS_ASSERTIONS构建设置,或通过定义NS_BLOCK_ASSERTIONS宏并将其设置为1来控制这一点。在XCODE 5中,有一个项目设置*使基础断言"在EDCOX1 4"中设置生成设置和默认为EDCOX1×3,EDCX1"5"在EDCOX1"0"配置中设置。