NSAssert/NSCAssert 和 NSParameter

2017-05-18  本文已影响0人  MrLee_同學

一些第三方的框架中,经常看见上述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的用法:

多少行出错,什么原因出的错,日志说的很清楚。

上一篇下一篇

猜你喜欢

热点阅读