NSAssert用法

来源:互联网 发布:js 添加disable属性 编辑:程序博客网 时间:2024/05/17 04:53

什么是assert

assert是断言、简单来讲、就是代码的作者认定这个条件一定要是能满足断言的条件、否则代码不满足最基本的条件也就不用再运行下去、防止错误的代码引起更深层的问题。

if (条件成立){}else {    中断程序}

NSAssert的定义如下

#define NSAssert(condition, desc, ...)  \    do {                \    __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \    if (!(condition)) {     \            NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \            __assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>"; \        [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \        object:self file:__assert_file__ \            lineNumber:__LINE__ description:(desc), ##__VA_ARGS__]; \    }               \        __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \    } while(0)#endif

我们来看下NSAssert的效果:
NSAssert(0, @”0”);
log如下:

* Assertion failure in -[HomeViewController viewDidLoad], /Documents/APP代码/Home/Controllers/TNHomeViewController.m:248

NSAssert不会像assert、直接中断程序、而是会停在的断点、然后仍然可以继续进行程序。

注意事项

  1. assert只会在debug模式下起作用、所以assert应该只用过错误处理、而不是异常处理。如果是防卫性编程、请使用异常处理
  2. assert 会占用较多的系统资源
  3. assert一次最好只关注一个条件、不要同时去判断多个条件、有利于捕捉错误。

ps:为什么宏的定义里面有do while(0),可以参考do while(0)的妙用

0 0