Xcode 中 NSAssert() 的用法

转载 2015年11月19日 17:16:25

关于 Xcode 中 NSAssert() 的用法 ,以及 assert() 与 NDEBUG


 assert(e) 是 C 语言里面的 宏 , 这个 宏的 定义 是 限制在 NDEBUG 条件 下的 ;

在没有定义 NDEBUG 宏的时候 会替换成 一行 三位运算符表达式 e? 0 : printf ( 文件,行号,方法名); abort();

如果定义了 NDEBUG宏 ,assert(e) 就会被替换成 一行 没有实际意义的 字符 比如 空格,或者 空函数。

没有定义 NDEBUG 的情况下,如果 e 为 0 ,就会 调用 后面的 两行函数,输出 当前 代码 信息,并 执行 abort 终止 进程。

NDEBUG 这个 宏 是为了 区分发布 和 测试 环境的 ,任何人都不希望 在 release 版本中 还 有 assert() 来 捣乱 。 发布时 把 这个NDEBUG 定义一下 就可以 了,也不用 一行一行的去删除 assert()。

abort();是C语言标准 函数 ,这个函数 会导致 进程异常终止 ,也就是说 , abort 后面的 时间里app 将没有任何代码可以执行。 系统 会 根据 系统设置 决定后续的操作,比如生成 该程序对应的 coredump 文件(也就是 崩溃日志)。

coredump 文件 里面 是 程序 崩溃时候的 现场 , 比如 寄存器 信息,函数调用 栈 列表 等 , 程序员拿到这个 coredumb 里面的 信息 就可以 定位 到具体的 出问题的 code 。

NSAssert 在 Objective - c 里面 也是 宏,他的做用 跟 assert() 几乎一样 ,release 模式下 就 什么也不执行 ,debug 就会 断言 。(release模式下 xcode定义了一个宏 NS_BLOCK_ASSERTIONS ,这个 宏 跟 c 里面的 NDEBUG 异曲同工)

NSAssert(condition,desc) , 在 debug模式下 被翻译

if (!(condition)) { \

[[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \

object:self file:[NSString stringWithUTF8String:__FILE__] \

lineNumber:__LINE__ description:(desc), ##__VA_ARGS__]; \

}


具体执行的操作就是 打印出 文件名 ,函数名 ,行号 , 然后 抛出 异常NSInternalInconsistencyException.

相关文章推荐

Xcode4.2 和 iOS 5 的ARC机制及用法介绍

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动...

iphone数据库(sqlite3)的用法操作oc,xcode

首先你在用之前要在项目中加入libsqlite3.dylib 1、定义模型 [cpp] #import    #import "sqlite3.h"   @class NotePad;  @...

Xcode4.2 和 iOS 5 的ARC机制及用法介绍

from: http://blog.csdn.net/niitlcj/article/details/7324409 ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(...

xcode自带SnapShots用法简介

再看一下SnapShot功能吧,这个功能好像只是在XCode 3.0以后才加上的, 这个功能用来管理个人的source code是很好用的,但是不能协同工作,下面我也简单的介绍一下吧. 1. 首...

过滤NSLog和NSAssert

为了避免切换“调试过程”和“发布版本”中,输出NSLog和断言NSAssert删除和添加带来的麻烦,本文介绍一下如何妥善解决这个问题,即在发布版本中自动滤除NSLog和NSAssert,而在调试版本中...

IOS项目打包除去NSLog和NSAssert处理之阿堂教程

yu 使用过ios开发的网友都知道,我们使用NSLog和NSAssert的目的是为了调试,并在调试阶段输出一些信息,但是在调试结束,应用发布后,如果还使用NSLog和NSAssert输出信息,那样会...

iOS断言 NSAssert的使用

断言(Assert): 在程序设计中,断言(assertion)是一种放在程序中的一阶逻辑(如一个结果为真或是假的逻辑判断式),目的是为了标示与验证程序开发者预期的结果-当程序运行到断言的位置时,对...

iOS版try cacth -- NSAssert用法

iOS版try cacth -- NSAssert用法 Posted in 相关技巧 NSAssert用法 今天突然发现了一个开发ios程序时调试的好帮手—NSAsser...

使用断言NSAssert()和NSParameterAssert调试程序错误

NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异常,并切可以自定义异...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)