debug 下NSLog 的處理


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


如果想要繼續使用NSLog ,也可以做如下處理:

#ifdef DEBUG 

#define NSLog(fmt, ...) NSLog((@"%s [Line %d]" fmt), __PRETTY_FUNCTION__,__LINE__,##__VA_ARGS__)

#else

#define NSLog(...)

#endif





發佈了25 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章