前言
在学习MLeaksFinder中,有
+ (BOOL)isAnyObjectLeakedAtPtrs:(NSSet*)ptrs {
NSAssert([NSThread isMainThread],@"Must be in main thread.");
.....
}
告诉调用者必须在主线程上调用isAnyObjectLeakedAtPtrs
,如果不是的话,就抛出一个异常。
基本语法
#define NSAssert(condition, desc)
condition
是一个表达式,如果表达式为false
,那么就抛出一个异常,并且在日志中输出desc
内容。
desc
可以忽略不写。
表达式为true
时,不执行任何操作。
Demo
在一个非导航控制中,按照下面这样写。
- (void)viewDidLoad {
[superviewDidLoad];
NSAssert([self isKindOfClass:[UINavigationControllerclass]],@"self必须是导航控制器,否则抛一个异常");
}
异常如图
屏幕快照 2017-10-22 上午11.10.22.png
使用场景
Xcode 已经默认将release环境下的断言取消了, 免除了忘记关闭断言造成的程序不稳定. 所以不用担心 在开发时候大胆使用。
所以在代码中任意位置都可以使用。可以用来告诉调用方如果调用,不要做影响逻辑的事,也可以用来做安全判断。
注意两点,1 为NO的时候抛出异常 2 只在Debug下抛出
网友评论