在开发程序、或是调试程序时,我们或多或少会使用NSLog。可是随着代码量的增加,NSLog的数量也是剧增。一旦到了程序上架那天,我们该怎么办呢?你该不会说要“一个一个删”吧。话不多说,直接来代码
在OC中
#ifdef __OBJC__ 保证 #ifdef 中的宏定义只会在OC的代码中被引用
否则,一旦引入C/C++的代码或者框架,就会出错!
#ifdef __OBJC__
#ifdef DEBUG
#define NSLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define NSLog(...)
#endif
#endif
因为宏是直接替换的优先级会更高。所以,通过这种方式更方便的把现有代码替换
#define NSLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) 为自定义部分,
__PRETTY_FUNCTION__ 哪个类调用的哪个方法
__LINE__ 打印代码所在的行数
##__VA_ARGS__ 这部分就是打印的正文了。
如我在ViewController里面写了一句代码
打印结果如下
-[ViewController viewDidLoad] [Line 20] **********************hello Lele
当然如果你只希望打印正文,那么只要这么写 #define NSLog(...) NSLog(__VA_ARGS__) 就够了
那么问题来了,这只是宏替换啊,说好的去log呢?
这时 #ifdef DEBUG 这句作用来了。
选中Release后,再运行程序,控制台就不会打印了
差点忘记说了,上面的那些代码要写在PCH文件中,这样才能保证全局替换。
额(⊙o⊙)…PCH是什么? 照顾一些新手,,简单说一下,PCH文件的作用就是可以把所有的宏写在这个文件了,适配后整个工程内的所有的文件都可以使用这些宏。说是PCH耗性能,但是由于其好用的性能,还是很受欢迎的。。
适配PCH ...
名字可以自己起,也可以用默认名。创建完成之后,开始适配
注意:如果你的PCH文件创建在工程外,也就是与工程名平级。那么就必须写全路径了(拖)
Swift
/** 自定义打印
- parameter message: 内容
- parameter file: 类名
- parameter function: 方法名
- parameter line: 行数 */
func printLog(_ message: T, file: String = #file, function: String = #function,line: Int = #line){
#if DEBUG
let newFile = (file as NSString).lastPathComponent
let result = "\(newFile) [\(line)] \(function) : \(message)"
print(result)
#endif
}
因为与OC差不多 这里就不赘述了