7

NSAssert和 和有什么不一样NSCAssert?当我探索他们的实现时,它们看起来非常相似,我找不到我的问题的答案。

我想它也会解释 和 之间的NSParameterAssert区别NSCParameterAssert

4

4 回答 4

13

第二个是C 和Objective-C 断言之间的区别:NSAssert 只能用于Objective-C 上下文(即方法实现),而NSCAssert 只能用于C 上下文(即函数)。

更多信息请访问http://nshipster.com/nsassertionhandler/

于 2014-02-14T12:58:16.753 回答
6

请注意,在块中使用 NSAssert/NSParameterAssert 可能会导致保留循环。请改用 C 变体。Google NSAssert 保留周期

于 2014-05-31T15:59:50.453 回答
3

这取自 NSHipster,见链接

Foundation 定义了两对断言宏:

NSAssert/NSCAssert

NSParameterAssert/NSCParameterAssert

Foundation 在其断言处理程序 API 中有两个区别,即语义上的和功能上的。

第一个区别是一般断言 ( NSAssert) 和参数断言 ( NSParameterAssert)。根据经验,方法/函数应该使用NSParameterAssert/NSCParameterAssert 方法顶部的语句来强制执行有关输入值的任何先决条件;在所有其他情况下,使用NSAssert/NSCAssert.

第二个是 C 和 Objective-C 断言之间的区别:NSAssert应该只在 Objective-C 上下文中使用(即方法实现),而 NSCAssert 应该只在 C 上下文中使用(即函数)。

于 2014-02-14T12:58:39.627 回答
2

NSAssert 应该只在Objective-C 上下文中使用,而NSCAssert 应该只在C 上下文中使用(即函数)。

于 2014-02-14T12:59:54.993 回答