NSAssert
和NSCAssert
之间有什么区别?当我探索他们的实现时,他们看起来非常相似,我找不到我的问题的答案。
我想这也会解释NSParameterAssert
和NSCParameterAssert
之间的区别。
答案 0 :(得分:13)
第二个是C和Objective-C断言之间的区别: NSAssert只应在Objective-C上下文中使用(即方法 实现),而NSCAssert只应在C上下文中使用 (即功能)。
答案 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上下文中使用(即函数)。