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.

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

关于 Xcode 中 NSAssert() 的用法 ,以及 assert() 与 NDEBUG,有需要的朋友可以参考下。 assert(e) 是 C 语言里面的 宏 , 这个 宏的 ...

Xcode的使用总结

1.Xcode IDE概览 说明:从左到右,依次是“导航窗格(Navigator)->边列(Gutter)->焦点列(Ribbon)->代码编辑窗口(Stan...

Xcode 4.2和iOS5的ARC机制及用法介绍

  • 2015年09月30日 14:50
  • 2.22MB
  • 下载

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

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动...
  • niitlcj
  • niitlcj
  • 2012年03月06日 13:14
  • 1169

xcode 技巧、用法 杂记

============================================================博文原创,转载请声明出处电子咖啡(原id蓝岩)=================...

xcode自带SnapShots用法简介

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

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(...

Object-C系列<Xcode4.2 和 iOS 5 的ARC机制及用法介绍>

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

iOS开发 - 断言的使用—NSAssert()

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

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