美文网首页
Tips:断言NSAssert()

Tips:断言NSAssert()

作者: dc630f46ee2d | 来源:发表于2017-10-22 10:53 被阅读0次

前言

在学习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下抛出

相关文章

  • Tips:断言NSAssert()

    前言 在学习MLeaksFinder中,有 告诉调用者必须在主线程上调用isAnyObjectLeakedAtPt...

  • 断言NSAssert

    NSAssert与assert NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是...

  • NSAssert断言

    NSAssert与assert NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是...

  • iOS一些开发中需要积累的知识

    1.NSAssert 调试的好帮手.断言 Exampe: NSAssert( x != 0, @"an erorr...

  • HQ移动20170317期周报

    1. NSAssert() 和 NSCAssert()的使用 NSAssert()用于 OC 语法的断言NSCAs...

  • NSAssert 断言

    NSAssert 是c语言的一个宏定义。 看一下具体定义: 具体使用: NSAssert(condition, ...

  • NSAssert断言

    今天运行代码遇到了NSAssert断言,这里做一个学习记录。 形式 官方文档链接 作用 在condition为fa...

  • 断言NSAssert

    开发ios程序时调试的好帮手---NSAssert()函数。而且和NSLog()函数一样简单易用,代码如下: N...

  • NSAssert(断言)

    NSAssert()是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属...

  • 断言: NSAssert()

    格式 NSAssert(condition, desc, ...) 作用: condition 不为空时断言为真,...

网友评论

      本文标题:Tips:断言NSAssert()

      本文链接:https://www.haomeiwen.com/subject/fbjguxtx.html