NSAssert用法

什么是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值