什么是NSParameterAssert?


Answers:


115

这是一种测试方法参数是否为nil0的简单方法。因此,基本上,您可以使用它来创建前提条件,指出必须设置某些参数。如果未设置,宏将导致应用程序中止并在该行上生成错误。所以:

- (void)someMethod:(id)someObjectThatMustNotBeNil
{
  // Make sure that someObjectThatMustNotBeNil is really not nil
  NSParameterAssert( someObjectThatMustNotBeNil );
  // Okay, now do things
}

前提条件是确保程序员正确调用方法/ API的简单方法。这个想法是,如果程序员违反了前提条件,则应用程序会提前终止-希望在调试和基本测试期间终止。

NSParameterAssert 可以用来测试任何表达式的计算结果是否为真,因此您也可以像这样使用它:

NSParameterAssert( index >= 0 ); // ensure no negative index is supplied

Apple的NSParameterAssert()宏文档


1
确保在代码中捕获异常,否则,如果Assert为true,则会使您的应用程序崩溃。
lucius

14
@lucius:断言不用于检查分布式应用程序中的条件,它们可以在开发过程中捕获错误。导致某些情况在恶劣条件下崩溃(例如笔尖未连接的插座),而不是无声地失败,可以让您尽早发现问题。许多人在发布时通过宏或#ifdefs禁用了这些功能。
布拉德·拉尔森

5
@lucius-目标是在不满足前提条件时导致应用程序中止。这使程序员立即知道他/他做错了什么。为了确保不评估Cocoa中的断言,您可以定义NS_BLOCK_ASSERTIONS宏。这会禁用它们,但是其思想是阻止副作用或慢速代码执行,而不是防止崩溃—通过生产,断言如果正确使用就永远不会触发。
杰森·可可

1
在进行生产构建时,是否可以通过简单的方式删除这些断言。恕我直言,这些最适合在开发过程中用来捕获编程错误(如上面的注释中所述)。
约翰·卡尔森

5
@JohanKarlsson可以,并且默认情况下在配置的当前版本的模板中设置(这可以追溯到很远)Release。您可以通过ENABLE_NS_ASSERTIONS在较新版本的Xcode中设置构建设置,或通过定义NS_BLOCK_ASSERTIONS宏并将其设置为1来控制此设置。在Xcode 5中,有一个项目设置* Enable Foundation Assertions`设置构建设置,默认设置为YesinDebugNoin。Release配置。
杰森·可可
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.