NSLog 的宏替换

作者: 莫太极 | 来源:发表于2016-09-24 17:08 被阅读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差不多 这里就不赘述了

    相关文章

      网友评论

        本文标题:NSLog 的宏替换

        本文链接:https://www.haomeiwen.com/subject/qgpxyttx.html