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;
}

报错示例图:


iOS断言-抛异常_第1张图片
test.png

示例二:

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

示例图:


iOS断言-抛异常_第2张图片
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))

你可能感兴趣的:(iOS断言-抛异常)