pch文件中自定义log

 1 // __OBJC__这个宏,在所有的.m和.mm文件中默认就定义了这个宏
 2 #ifdef __OBJC__
 3
 4 // 如果这个全局的头文件或者宏只需要在.m或者.mm文件中使用,
 5 // 请把该头文件或宏写到#ifdef __OBJC__ 中
 6
 7     #import <UIKit/UIKit.h>
 8     #import <Foundation/Foundation.h>
 9
10
11 #ifdef DEBUG
12 #define NJLog(...) NSLog(__VA_ARGS__)
13 #else
14 #define NJLog(...)
15 #endif
16
17 #endif
18
19 /*
20  pch文件的应用常见
21  用来定义一些全局的宏
22  用来导入一些全局都能用到的头文件
23  用来自定义log
24  */

前提:在XCode做开发调试时往往需要打印一些调试信息做debug用,大家知道当打印信息的地方多了之后在模拟器上跑可能不会有什么问题,因为模拟器用的是电脑的硬件但是当应用跑在设备上时这些输出语句会在很大程度上影响应用的性能,针对这种问题可以写一些宏来控制这些调试信息的输出。

在release版本禁止输出NSLog内容

因为NSLog的输出还是比较消耗系统资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉。

我们可以在发布版本前先把所有NSLog语句注释掉,等以后要调试时,再取消这些注释,这实在是一件无趣而耗时的事!还好,还有更优雅的解决方法,就是在项目的prefix.pch文件里加入下面一段代码,加入后,NSLog就只在Debug下有输出,Release下不输出了。

如何实现:

在-Prefix.pch(pch全称是“precompiled header”,也就是预编译头文件,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,这样做的目的提高编译器编译速度。我们知道当我们修改一个工程中某个文件代码时候,编译器并不是重新编译所有所有文件,而是编译改动过文件的,假如pch中某个文件修改了,那么pch整个文件里包含的的其他文件也会重新编译一次,这样就会消耗大量时间,所以它里面添加的文件最好是是很少变动或不变动的头文件或者是预编译的代码片段;)文件中添加

[plain] view plaincopy

  1. #ifdef DEBUG
  2. #define NSLog(...) NSLog(__VA_ARGS__)
  3. #define debugMethod() NSLog(@"%s", __func__)
  4. #else
  5. #define NSLog(...)
  6. #define debugMethod()
  7. #endif

上段代码的意思就是 用宏指令做一个判断,如果DEBUG为真,则编译#ifdef到#endif宏定义,否则编译器就不编译;

这个DEBUG在哪设置呢,

在 "Target > Build Settings > Preprocessor Macros > Debug" 里有一个"DEBUG=1"。

设置为Debug模式下,Product-->Scheme-->SchemeEdit Scheme

设置Build Configuration成Debug时,就可以打印nslog了。

设置Release,发布app版本的时候就不会打印了,提高了性能

时间: 2024-12-28 15:00:18

pch文件中自定义log的相关文章

Andoid java文件中的Log检查工具

AndroidLogChecker 由于发布软件版本的时候我们需要把Log注释掉,此工具可以检查java类中的Log所在行以及是否已经注释. Github: https://github.com/cumtkangyi/AndroidLogChecker package com.leo.kang.tools; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; impor

python交互环境中导入文件中自定义的函数报错

今天在学习python自定义函数时,遇到一个问题:我用notepad++编辑器自定义的函数,在交互环境下使用from 文件名 import 函数名 导入时,一直报错,检查了好几遍,一直报这个错: 代码如下: # -*-coding:utf-8 -*- #自定义函数 def 函数名(参数1,参数2...): 然后在缩进体内编写函数体,用return返回值 #自定义求绝对值函数 #def my_abs(x): #如果参数类型不是int或者float,会抛出类型错误异常 # if not isinst

在pom.xml文件中自定义JDK版本

在学习和开发中 总是修改jdk版本 但是这些配置文件又不想记 在此记录一下 方便查询: 1 <build> 2 <plugins> 3 <!-- 指定jdk --> 4 <plugin> 5 <groupId>org.apache.maven.plugins</groupId> 6 <artifactId>maven-compiler-plugin</artifactId> 7 <configuratio

Swift中自定义Log

func XDLog<T>(message : T,file : String = __FILE__,funcName : String = __FUNCTION__,lineNum : Int = __LINE__){ #if DEBUG        //1.对文件进行处理        let fileName = (file as NSString).lastPathComponent        //2.打印内容        print("[\(fileName)]:[

XCode中创建pch文件

xcode6中没有自带的pch文件 创建步骤: 1.New File... -> iOS -> Other -> PCH File (文件名可以自定义) 2.设置pch文件的路径:  targets -> BuildSetting -> Prefix Header -> 设置$(SRCROOT)/文件在工程中的路径 3.pch能像以前一样正常使用 pch文件的作用: 在pch文件中添加的头文件,在工程其他文件中无需重复频繁的添加

[转]Xcode6中如何添加pch文件

在Xcode6之前,新建一个工程的时候,系统会帮我们自动新建一个以工程名为名字的pch (precompile header)文件,在开发过程中,可以将那些整个工程都广泛使用的头文件包含在该文件下,编译器就会自动的将pch文件中的头文件添加到所有的源文件中去,这样在需要使用相关类的时候不需要使用import就可以直接使用头文件中的内容,很大程度上带来了编程的便利性,但潜在的也带来了一些问题,这也是在Xcode6中默认不再创建pch的原因吧. 关于pch的得与失,stackoverflow上有段话

Xcode6中添加pch文件

1. pch文件: pch表示“precompiled header”,叫做预编译头文件,Xcode6之后pch文件就需要手动添加,pch文件中一般放一些基本不会改变的代码,比如一些宏定义这样整个工程都可以使用或者一些框架的头文件. pch文件的目的是提高编译的效率,Xcode中某个文件被修改了,任何包含该文件的文件都需要重新编译.如果pch文件被修改了,pch所包含的所有文件都会重新编译,这样会消耗大量的时间. pch文件中定义宏定义和头文件: 2.Xcode6下添加pch文件步骤: (1)添

iOS开发中.pch 文件的使用及其相关工程设置

.pch文件 也是一个头文件,pch头文件的内容能被项目中的其他所有源文件共享和访问.是一个预编译文件. 首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部的头文件(整个项目中都用得上的头文件) 3.能自动打开或者关闭日志输出功能 其中可以用来存储共享信息:其他页面需要导入的头文件以及屏幕宽度.高度设置,需要的第三方库的头文件等: 创建pch文件->file->new file ->选择iOS下的other中的pch file 然后点击下一步即

iOS中pch文件的应用

今天写项目要用到全局变量,第一反应就想到了pch文件这个东西. pch文件是一个标准的预编译头文件(Precompiled Header).在Xcode6之后如果我们要使用pch文件,那就必须要自己手动去创建它. 下来我就把我自己创建pch文件的过程记录下来,有需要的可以看看! 首先我们要手动去创建pch文件 1.在项目的Supporting Files或者项目其它位置新建文件 2.选择pch文件创建 3.修改文件名(自己随意修改) 4.在pch文件中编写自己需要设置全局变量的东西 5.配置路径