Tips:断言NSAssert()

前言

在学习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必须是导航控制器,否则抛一个异常");

}

异常如图


Tips:断言NSAssert()_第1张图片
屏幕快照 2017-10-22 上午11.10.22.png

使用场景

Xcode 已经默认将release环境下的断言取消了, 免除了忘记关闭断言造成的程序不稳定. 所以不用担心 在开发时候大胆使用。

所以在代码中任意位置都可以使用。可以用来告诉调用方如果调用,不要做影响逻辑的事,也可以用来做安全判断。

注意两点,1 为NO的时候抛出异常 2 只在Debug下抛出

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