iOS断言-抛异常

1.什么是断言?

  • 断言本质只是一个宏NSAssert(condition, desc),当表达式(condition)为真时,程序继续运行,如果表达式为假,那程序就会停止运行,并提示错误信息(desc)

2.应用场景:

  • 用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛异常,并切可以自定义异常描述。NSAssert()是这样定义的:
#define NSAssert(condition, desc)

3.什么是抛异常?

  • 自定义描述异常信息的desc就是所谓的抛异常
  • 注意:assert是一个宏,只在debug版本中起作用,在release版本中,该语句是不起任何作用的。

示例一:给图片属性赋值不能为空,添加断言,如果为空,则直接crash,抛异常

@interface ViewController ()
@property (nonatomic,weak) UIImage *icon;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIImageView *imageView = [[UIImageView alloc] init];
    imageView.frame = CGRectMake(100, 100, 200, 200);
    [self.view addSubview:imageView];
    self.icon = [UIImage imageNamed:@""];
    imageView.image = self.icon;
}

- (void)setIcon:(UIImage *)icon
{
    NSAssert(icon != nil , @"图片不能为空" );
    _icon = icon;
}

报错示例图:


test.png

示例二:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    BOOL isOn = NO;
    NSAssert(isOn, @"如果表达式是假,直接报错");
}

示例图:


demo.png

利用宏自定义断言

#define  DXAssertNil(a,b,...)   NSAssert((a)==nil,(b))
#define  DXAssertNotNil(a,b,...)    NSAssert((a)!=nil,(b))
#define  DXAssertTrue(a,b,...)    NSAssert((a),(b))
#define  DXAssertEquals(a,b,c,...)   NSAssert((a==b),(c))
#define  DXAssertNotEquals(a,b,c,...)    NSAssert((a!=b),(c))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,803评论 19 139
  • 一直想写一篇你关于断言的文章, 今天有时间赶紧写出来.参考 Mattt 文章 一、Objective - C 中的...
    Mitchell阅读 13,769评论 1 24
  • 下雨了。 从上午的时候就天色阴暗,明明知道今天免不了一场雨,就期待着,不要是太大的雨,好似以前晚上出去上自习,一出...
    2小阅读 1,792评论 0 0
  • 新爸五年计划|童言•把妈妈升上天空 今天早上吃饭时候,诺子突然说:“妈妈,我想把你升上了天空,玩一玩你,就像风筝那...
    橘子郡的天空阅读 2,312评论 2 1
  • “闭嘴,请你不要随便打扰我的幸福。 1 儿子考上大学,虽然是普通大学,但全家都为他骄傲。 他爸对他说:我只上了四年...
    浅谷阅读 7,210评论 0 0

友情链接更多精彩内容