美文网首页
NSAssert/NSCAssert 和 NSParameter

NSAssert/NSCAssert 和 NSParameter

作者: MrLee_同學 | 来源:发表于2017-05-18 13:58 被阅读0次

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

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

    相关文章

      网友评论

          本文标题:NSAssert/NSCAssert 和 NSParameter

          本文链接:https://www.haomeiwen.com/subject/gzydxxtx.html