定义:
断言(assertion)是指在开发期间
使用的、让程序在运行时进行自检
的代码(通常是一个子程序或宏)
断言为真,则表明程序运行正常
断言为假,则意味着它已经在代码中发现了意料之外的错误
断言对于大型的复杂程序
或可靠性要求极高
的程序来说尤其有用
作用:
- 用
错误处理代码
来处理预期
会发生的状况
,用断言
来处理绝不应该
发生的状况。 -
避免
把需要执行
的代码放到断言中 - 用断言来
注解
并验证
前条件和后条件 - 对于
高健壮性
的代码,应该先使用断言再处理错误 - 可以帮助开发者
尽快定位Bug
场景:
对来源于内部系统的可靠的数据
使用断言
,而不要
对外部不可靠的数据
使用断言
对于外部不可靠数据
,应该使用错误处理
代码
断言可以看成可执行的注释
在Debug
中使用
断言检查,在Release
中禁用
断言检查
使用:
Summary
Generates an assertion if a given condition is false.
Declaration
#define NSAssert(condition, desc, ...)
- (void)printMyName:(NSString *)myName {
NSAssert(myName != nil, @"名字不能为空!");
NSLog(@"My name is %@.",myName);
}
//如果传入的 myName 为空,则会抛出以下异常:
NSAssert[1268:a0b] *** Assertion failure in -[ViewController printMyName:] NSAssert/NSAssert/ViewController.m:38
2019-04-21 13:56:01.927 NSAssert[1268:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '名字不能为空!'
在 Release 中禁用断言:
Project -> Build Settings -> Enable Foundation Assertions -> Release = No
Project -> Build Settings -> Preprocessor Macros -> Release = NS_BLOCK_ASSERTIONS
网友评论