1.在打印log信息的时候,我们常常不知道此Log信息来自本代码的哪行。用NSLog函数替代可以解决这个问题“
做法:
1.1在Prefix.pch中添加如下代码:
extern void LogFunction(NSString *format, ...); #ifdef DEBUG #define __BASENAME__ (strrchr(__FILE__, '/') + 1) #define NSLogAlt(...) \ LogFunction(@ "%s(%s:%05d)%@" , __PRETTY_FUNCTION__, __BASENAME__, __LINE__, [NSString stringWithFormat:__VA_ARGS__]) #else #define NSLogAlt(...) #endif #define NSLog(...) NSLogAlt(__VA_ARGS__)
|
1.2 在main函数中添加:
void
LogFunction(NSString *format, ...)
{
va_list
argList;
va_start
(argList, format);
NSString *str=[[NSString alloc]initWithFormat:format arguments:argList];
va_end
(argList);
#undef NSLog
NSLog(@
"%@"
, str);
#define NSLog(...) NSLogAlt(__VA_ARGS__)
// [str release];
}
使用:直接使用NSLog(@“”)打印信息。此时打印的信息中包含文件名,函数名以及该打印信息在NSLog所在文件中的位置。
2.release模式下禁用NSLog
NSLog的运行会占用时间和设备资源,因此在Release模式下编译的程序最好不用NSLog,而在Debug模式下将执行NSLog的全部功能
Release模式通常会定义__OPTINIZE__,Debug模式不会。将下面的代码放在头文件中你就可以放心的时候NSLog了、
- #ifndef __OPTIMIZE__
- # define NSLog(…) NSLog(__VA_ARGS__)
- #else
- # define NSLog(…) {}
- #endif