代码编写的过程中,不可避免需要应用NSLog函数打印很多调试信息,为了更好的使用答应信息,我们可以自定义自己的全局信息打印函数。
一般步骤介绍如下:
一、配置 pch 文件
现在的 Xcode 版本都不再自动生成pch文件,所以还需要先新建并座椅简单的Xcode设置
1. new file > other > PCH file > 命名为PROJectPrefixHeader。 会生成一个拓展名为.pch的文件(PROJectPrefixHeader.pch)
2.选择工程 target > Build Settings (搜索prefix header定位到) > Apple LLVM , 将Prefix Header添加设置:PROJect/PROJectPrefixHeader.pch(工程名/.pch 名)。将上方的Precompile Prefix Header 设置为YES,顺便command + B编译一下,没问题就完成pch 导入了。
二、在pct 中添加的引用将是工程全局可见的,(不过不要什么都往里头添加,会增加编译耗时的)
1. pct 默认生成的时候里面没有任何内容,早期的Xcode版本自动深处.pch 文件中会有如下内容
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
注意:a. #ifdef __OBJC__ (code ) #endif 这个有作用是保证#ifdef 中的宏定义,文件头引入,等 只是在 OC 的代码中被引用。避免了一些可能出错的情况,如一旦引入一 些 C / C++ 的代码或者框架可能会出的问题。
b. 其中(code )部分是我们在 OC 中要使用的 全局引入代码 或者 宏定义, 接下来对自定义的信息打印输出函数的宏代码也要放在这个位置。
2. 下面给了两种定义方法,如果是新建工程,刚开始,建议使用第一种方式,
#ifdef DEBUG //Xcode中默认已经定义了DEBUG宏(Build Settings > Preprocessor Macros : DEBUG)
# define XLOG(fmt, ...) do { \
NSString* file = [[NSString alloc] initWithFormat:@"%s", __FILE__]; \
NSLog((@"%@(%d) " fmt), [file lastPathComponent], __LINE__, ##__VA_ARGS__);\
} while(0)
# define XLOG_METHOD NSLog(@"%s", __func__)
# define XLOG_CMETHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSStringFromSelector(_cmd))
# define XLOG_TRACE(x) do {printf x; putchar('\n'); fflush(stdout);} while (0)
#else
# define XLOG(...)
# define XLOG_METHOD
# define XLOG_CMETHOD
# define XLOG_TRACE(x)
#endif
#ifdef DEBUG
#define NSLog(fmt, ...) NSLog((@"%s [Line %d]" fmt), __PRETTY_FUNCTION__,__LINE__,##__VA_ARGS__)
#else
#define NSLog(...)
#endif