介绍NSLog的使用
2012-02-11 11:20
337 查看
NSLog的定义
NSLog定义在NSObjCRuntime.h中,如下所示:void NSLog(NSString *format, …);
基本上,NSLog很像printf,同样会在console中输出显示结果。不同的是,传递进去的格式化字符是NSString的对象,而不是chat *这种字符串指针。
示例
NSLog可以如下面的方法使用:NSLog (@"this is a test");
NSLog (@"string is :%@", string);
NSLog (@"x=%d, y=%d", 10, 20);
但是下面的写法是不行的:
int i = 12345;
NSLog( @"%@", i );
原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:
int i = 12345;
NSLog( @"%d", i );
输出:
2009-03-23 11:01:32.936 DebugLog[12085:807] Hello, World!上面的信息依次为时间,进程名称,进程ID,线程ID,Log的内容。
格式
NSLog的格式如下所示:%@ 对象
%d, %i 整数
%u 无符整形
%f 浮点/双字
%x, %X 二进制整数
%o 八进制整数
%zu size_t
%p 指针
%e 浮点/双字 (科学计算)
%g 浮点/双字
%s C 字符串
%.*s Pascal字符串
%c 字符
%C unichar
%lld 64位长整数(long long)
%llu 无符64位长整数
%Lf 64位双字
使用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
原文:
http://blog.csdn.net/nicktang/article/details/6264713
相关文章推荐
- 介绍NSLog的使用
- 介绍NSLog的使用
- 介绍NSLog的使用
- 初学者:介绍NSLog的使用
- 初学者:介绍NSLog的使用
- 初学者:介绍NSLog的使用
- 介绍 NSLog 的使用
- 初学者:介绍NSLog的使用
- 初学者:介绍NSLog的使用
- 介绍NSLog的使用
- 初学者:介绍NSLog的使用
- 初学者:介绍NSLog的使用
- 初学者:介绍NSLog的使用
- ExtJs4.0 目录介绍及使用方法
- ABViewer图形查看器功能介绍免费下载及使用方法破解
- Ant介绍以及基本使用指南
- 使用Eclipse-Maven-git做Java开发(6)--介绍一下maven
- 宾西法尼亚大学强制对齐标注软件(P2FA)介绍以及使用说明
- commons.dbutils1.2介绍及使用
- 常用DHCP Opition 介绍和使用