#iOS#HeminWon

NSLog 的宏替换

2016-09-24  本文已影响0人  莫太极

        在开发程序、或是调试程序时,我们或多或少会使用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 这句作用来了。

Xcode的左上角

选中Release后,再运行程序,控制台就不会打印了


差点忘记说了,上面的那些代码要写在PCH文件中,这样才能保证全局替换。

额(⊙o⊙)…PCH是什么? 照顾一些新手,,简单说一下,PCH文件的作用就是可以把所有的宏写在这个文件了,适配后整个工程内的所有的文件都可以使用这些宏。说是PCH耗性能,但是由于其好用的性能,还是很受欢迎的。。

适配PCH  ...

Xcode8.0(按照红框的选,都一样)

名字可以自己起,也可以用默认名。创建完成之后,开始适配

最后一步可以直接拖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差不多 这里就不赘述了

上一篇 下一篇

猜你喜欢

热点阅读