NSLog的使用


解决Xcode8 无法打印的问题:

#ifdef DEBUG
#define XTNSLog(...) printf("%s -LineNumber:%d: %s\n",__PRETTY_FUNCTION__, __LINE__ ,[[NSString stringWithFormat:__VA_ARGS__]UTF8String]);
#else
#define XTNSLog(...)
#endif


首先先记住这段话 放在PCH文件中!

#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#define DeBugLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#define NSLog(...) NSLog(__VA_ARGS__);
#define MyNSLog(FORMAT, ...) fprintf(stderr,"[%s]:[line %d行] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define DLog(...)
#define DeBugLog(...)
#define NSLog(...)
#define MyNSLog(FORMAT, ...) nil

#endif


1) VA_ARGS 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
  2) FILE 宏在预编译时会替换成当前的源文件名
  3) LINE宏在预编译时会替换成当前的行号
  4) FUNCTION宏在预编译时会替换成当前的函数名称



在iOS开发过程中,我们经常要用到NSLog来打印一些调试信息,而且一般是习惯性的大量使用,在模拟器上运行可能没有感觉到什么,但是在真机上,这些NSLog的输出还是比较消耗系统资源的,而且输出的数据有时也可能会暴露出App中的某些私密数据,所以发布正式版时需要把这些输出全部屏蔽掉。
如果只是为了在发布的时候release版本吧所有的nslog全部注释掉的话也行,是不是显得很low,我们现在项目中用到的都是直接打印耗费性能,但是,但是我没有打算去改掉这个东西 ,公司项目我是接手的项目代码就特么很乱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值