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

在iOS编程中,为了清晰地跟踪代码流程,通常使用NSLog。本文介绍了如何利用C预处理器宏和Objective-C的隐含参数_cmd,增强NSLog的输出信息,包括文件名、方法名和行号。通过在_Prefix.pch文件中定义宏,可以简化并标准化日志打印,提高调试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值