一些第三方的框架中,经常看见上述4个关键词,大概知道是苹果定义的宏,但不知道具体的用法,更不知道怎么在实际中去合理的应用到到上述4个宏。所以有必要解释一下这4个宏的作用:
#define NSAssert(condition, desc)
NSAssert()是定义的一个断言宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异常,并且可以自定义异常描述。condition是条件表达式,值为YES或NO;desc为异常描述,通常为NSString。当conditon为YES时程序继续运行,为NO时,则抛出带有desc描述的异常信息。NSAssert()可以出现在程序的任何一个位置。
NSAssert/NSCAssert 宏定义的区别
[[NSAssertionHandler currentHandler] handleFailureInMethod : _cmd object : self file:[NSString stringWithUTF8String:__FILE__] lineNumber:__LINE__ description:(desc), ##__VA_ARGS__];}
[[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithUTF8String: __PRETTY_FUNCTION__ ] file : [NSString stringWithUTF8String: __FILE__] lineNumber:__LINE__ description:(desc), ##__VA_ARGS__] ; }
从定义可以看出来,前者是适合于ObjectC的方法,_cmd 和 self 与运行时有关. 后者是适用于C的函数。NSParameterAssert / NSCparameterAssert 两者的区别也是前者适用于Objective-C的方法,后者适用于C的函数。实际开发中就用前者就可以了。
NSAssert/NSCAssert 和 NSParameterAssert / NSCparameterAssert 的区别是前者是对条件断言, 后者只是对参数是否存在的断言:
NSAssert的用法:
运行则会崩溃并在控制台输出信息如下:
NSParameterAssert的用法:
多少行出错,什么原因出的错,日志说的很清楚。