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

这里写图片描述
例子二


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

iOS断言_第1张图片
自定义的宏

#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))

你可能感兴趣的:(断言)