1. 程式人生 > >iOS通過巨集定義設定NSLog打印出類名、方法名和NSLog所在行數以及PCH的作用

iOS通過巨集定義設定NSLog打印出類名、方法名和NSLog所在行數以及PCH的作用

NSLog函式真機不列印

在實際專案中NSLog函式列印資訊是必不可少的事情,可以友好的幫助我們除錯程式,然而在模擬器上佔用的是電腦的記憶體,但在真機上線時如果不把NSLog函式遮蔽掉,勢必會造成記憶體的佔用,效能的減弱,這對做一款優秀的App的出發點是十分違背的,所以在真機中藉助PCH設定全域性變數不列印NSLog函式是實戰專案中必不可少的要求。

#if DEBUG

#define NSLog(FORMAT, ...) fprintf(stderr,"[%s:%d] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

#else

#define NSLog(FORMAT, ...) nil

#endif

* 1) VA_ARGS 是一個可變引數的巨集,很少人知道這個巨集,這個可變引數的巨集是新的C99規範中新增的,目前似乎只有gcc支援(VC6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的”,”去掉的作用,否則會編譯出錯, 你可以試試。

2) FILE 巨集在預編譯時會替換成當前的原始檔名

3) LINE巨集在預編譯時會替換成當前的行號

4) FUNCTION巨集在預編譯時會替換成當前的函式名稱

測試的時候可以列印Log值,但是上線的時候記得把列印的值關掉!

pch的作用:

1.存放一些全域性的巨集(整個專案中都用得上的巨集)

2.用來包含一些全部的標頭檔案(整個專案中都用得上的標頭檔案)

3.能自動開啟或者關閉日誌輸出功能