使用NSLog的一个风险是:它的运行会占用时间和设备资源。当我们用Simulator时,NSLog的资源占用并不引人注意,风险也不会显示出来。但是如果你写的是一个即时战略游戏,而你在每一个action中都加入了NSLog——那么NSLog将成为一个魔鬼。灾难的具体表现常常是:你在Simulator中运行游戏畅通无阻,但到了真机上,会发现很“卡”,不论是拖动一个单位还是缩放一个场景,FPS也降到了各位数。
简单而粗暴的解决方案是:在一个游戏release前,将所有的NSLog注释掉。简单有效,但副作用是:下次你要调试时,又得将NSLog一个个取消注释。
解决方案:你以release模式编译的程序不会用NSLog输出,而你以debug模式编译的程序将执行NSLog的全部功能。
#ifndef __OPTIMIZE__
# define NSLog(…) NSLog(__VA_ARGS__)
#else
# define NSLog(…) {}
#endif
这个代码的魔术在于:release模式通常会定义 __OPTIMIZE__,当然debug模式不会。将这段代码放在你的头文件当中,你就可以放心的使用NSLog了!
上面的宏是使用qDebug输出调试信息,在非Qt的程序中也可以改为printf,守护进程则可以改为syslog等等... 其中,决窍其实就是这几个宏 ##__VA_ARGS__, __FILE__, __LINE__ 和__FUNCTION__,下面介绍一下这几个宏:
补充:
1) __VA_ARGS__是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错,
你可以试试。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称
分享到:
相关推荐
在iOS开发中,debug时经常要用到NSLog输出内容,debug完成后又需要去掉,比较麻烦,内容也不够详细。参考网上资源,扩展NSLog并利用宏替换实现按class打开或关闭的详细的NSLog输出,可以方便使用。
nslog输出格式 iphone开发 非常好用的nslog,提供各种格式的输出。
XCode用NSLog输出系统字体名称!不知道系统都有那些字体的!可以参照此Demo
作者jiaforios,源码ZJDebugLogView,实现方法:重定向NSLog 输出到本地 实现脱机下同样可以查看输出日志 使用方法: 在全局头文件中(.pch 文件) 中重新宏定义 NSLog #define NSLog(format, ...) do { \ (NSLog...
在开发IOS程序过程中,经常需要用到NSLog输出一些信息,甚至有的开发过程,必须在控制台查看输出,有经验的程序员通过控制台输出就能知道整个数据交互的一个流程。但是一个发布的程序,里面带有太多的NSLog输出,...
本文给大家介绍的是iOS开发中关于nslog的输出时机的相关内容,非常简单实用,有需要的小伙伴可以参考下
主要介绍了Objective-C中NSLog输出格式的相关资料,非常的简单,有需要的小伙伴可以参考下。
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
iphone 开发学习项目创建及调试输出NSLog,初学者
Teleport-NSLog, iOS远程日志记录将NSLog消息发送到后端服务器 传送 nslog 当你的应用程序在用户的设备中运行时,传送NSLog捕获NSLog消息,并将它们发送给指定的后端服务器。 在Xcode中调试时,我们使用NSLog将许多...
IOS上线项目NSLog处理
特性:1)使用CC_LOG代替NSLog,并且提供更加详细的输出信息。使用方法和NSLog完全一致; 2)使用CC_LOG_VALUE直接打印各种值; 3)支持Log记录,支持Developer UI; 4)支持捕获Crash信息,区分普通Log和Crash Log;...
iphone 开发学习基础NSLog,初学者使用。
NSLog时常用的打印格式,记不住的保留看看
前言 对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发...NSLog输出到哪里? 在iOS开发中,我们经常会用到NSLog调试,但是我们却不太了解它。在NSLog本质是一个C函数,它的函
iphone开发学习笔记(1)--NSLog
网上有很多关于解决WKWebView错误日志不停打印 [Process] kill() returned ...其实我们可以通过重定向NSLog,过滤掉不需要的信息,然后使用非标准错误流输出日志信息。下面是实现代码: Swift版本 #if DEBUG pr