NSAssert/NSCAssert 和 NSParameterAssert/NSCparameterAssert的区别

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文结构 参考孟岩老师的文章,对本文结构如下划分 基本数据类型基本语法数组和其他集合类基本输入输出和文件处理,输入...
    不抄完整本三国不改名阅读 539评论 0 1
  • 1.NSAssert NSAssert()是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递...
    字节码阅读 1,563评论 0 5
  • 翻译对比 1. The former bookseller accounts for more than half...
    潘慧_06b3阅读 1,500评论 0 0
  • 小雨滴,小雨滴,落在麦秸垛,庄稼地/ 小雨滴,小雨滴,落在花雨伞,呢大衣/这世界本没有城市村庄的差异,只是人们的相...
    狗奴才乐队阅读 167评论 0 0