代碼編寫的過程中,不可避免需要應用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