如何在Objective-C中打印日志记录

来源:互联网 发布:推推棒淘宝店零食 编辑:程序博客网 时间:2024/04/28 12:45

在进行IOS编程的过程中,中会遇到这样一个问题:如果在代码中写了很多NSLog()函数,来确定程序的运行进程,当项目越写越大,因NSLog带来的末端输出信息会越来越多,这是已经很不难分清每个 NSLog函数在程序的那个位置了。因此,如果末端的输出信息中包含了这个NSLog()所在的上下文信息,比如那个文件中的哪个方法调用的,在哪一行等等,这样就很明了了。

其实,C预处理器提供了很多关于当前文件、行号或者功能信息的标准宏。而且,OC中的隐含参数_cmd会给出当前选择的方法等信息,如果在你的NSLog()中加入这些信息,对于你调试或者错误处理一定能提供有益的参考。

下面把最常用的宏和表达式写出来说明



上面两张图是我从苹果开发文档上截取的图

英文已经讲的很详细了,下面我演示一下上面几个函数的用法


- (void)viewDidLoad{    [super viewDidLoad];//    [self addAView];//    [self addAButton];        NSMutableArray * array = [[NSMutableArray alloc]initWithCapacity:0];    NSLog(@"%s:%d someObject=%@", __func__, __LINE__, array);    [array addObject:@"iOS"];    NSLog(@"%s:%d someObject=%@", __func__, __LINE__, array);}
运行后控制台打印的结果为:

2014-01-23 15:55:40.814 test[2994:70b] -[ViewController viewDidLoad]:24 someObject=()2014-01-23 15:55:40.815 test[2994:70b] -[ViewController viewDidLoad]:26 someObject=(    iOS)

NSLog(@"\n%s",__FILE__);

/Users/****/Desktop/文件夹名称/test/test/ViewController.m



NSLog(@"\n%@",[[NSStringstringWithUTF8String:__FILE__]lastPathComponent]);

ViewController.m



下面说一下我项目中的使用:

在应用的****-Prefix.pch文件中有如下代码

//这个宏是得出这段代码做对应的.m文件

#define DEBUG_FILENAME [[[NSString stringWithUTF8String:__FILE__] 

componentsSeparatedByString:@"/"lastObject]


//DEBUG_NEW_FMT(fmt) 这个宏是得到fmt这个对象所处的在哪个.m文件下的哪个函数,并处在这个.m文件的第几行

#define DEBUG_NEW_FMT(fmt) \

[NSString stringWithFormat:@"%s(%@:%d) %@", \

__FUNCTION__, \

DEBUG_FILENAME, \

__LINE__, \

fmt]



//##__VA_ARGS__ 也是一个宏(#define Macro(...) __VA_ARGS__),他的作用是支持可变参数,被省略的参数会被扩展成空串,作用和上面一样,只是重新定义了NSLog()

#define DLog(fmt, ...) NSLog(DEBUG_NEW_FMT(fmt), ##__VA_ARGS__)


//打印空日志,参数0为了消除编译器的警告

#define DEBUG_LOG_NULL NSLog(DEBUG_NEW_FMT(@""),0)


//打印一个变量

#define DEBUG_LOG_VALUE(x, fmt)  do {  \

DEBUG_LOG(@#x " = " #fmt, x); \

} while(0)



0 0
原创粉丝点击