NSAssert与NSCAssert

时间:2014-02-14 12:55:15

标签: ios objective-c assert nsassert

NSAssertNSCAssert之间有什么区别?当我探索他们的实现时,他们看起来非常相似,我找不到我的问题的答案。

我想这也会解释NSParameterAssertNSCParameterAssert之间的区别。

4 个答案:

答案 0 :(得分:13)

  

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

更多http://nshipster.com/nsassertionhandler/

答案 1 :(得分:4)

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

答案 2 :(得分:3)

这取自NSHipster,见link

  

Foundation定义了两对断言宏:

     

NSAssert/NSCAssert

     

NSParameterAssert/NSCParameterAssert

     

Foundation在其断言处理程序API中进行了两处区分   既是语义的,也是功能性的。

     

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

     

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

答案 3 :(得分:2)

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