iOS開發:pch檔案中的巨集定義

江湖hi客發表於2016-08-02

一、pch檔案中的巨集定義

以遮蔽NSLog()函式為例進行說明

1.在***-Prefix.pch裡面新增, 重新定義系統的NSLog,__OPTIMIZE__ 是release 預設會加的巨集#ifndef __OPTIMIZE__

#ifndef __OPTIMIZE__//__OPTIMIZE__此巨集定義在release環境下有定義,#ifnef 就代表:如果沒有_OPTIMEZE_定義

	#define NSLog(...) NSLog(__VA_ARGS__)//如果是debug環境就列印
#else
	#define NSLog(...){}//如果是release環境就遮蔽
#endif

2.在***-Prefix.pch裡面新增 ,直接自己寫#define,當release版本的時候把#define 註釋掉即可

#define IOS_DEBUG//自己定義一個巨集定義 當需要時將此定義直接刪掉即可改變下邊程式碼的執行

#ifdef IOS_DEBUG//如果這個巨集定義存在就
	#define NSLog(...) NSLog(__VA_ARGS__)
#else
	#define NSLog(...) {}
#endif

3.在***-Prefix.pch裡面新增

#ifdef DEBUG//debug環境下
	# define DLog(format, ...) NSLog((@"\n[檔名:%s]\n" @"[函式名:%s]\n" @"[行號:%d]\n" @"["format@"]\n"), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#else//release環境下
	# define DLog(...);
#endif

呼叫DLog

 DLog(@"自定義:%@",@"women");
日誌輸出如下:

2016-08-02 22:23:25.211 DebugTest[28762:777905] 

[檔名:/Users/LKlixiaoyi/Desktop/DebugTest/DebugTest/ViewController.m]

[函式名:-[ViewController viewDidLoad]]

[行序號:20]

[自定義:women]

PS:這種方式需要修改專案的配置,使得在debug編譯的時候,編譯DLog的巨集,產生詳細的日誌資訊,而release的時候,不產生任何控制檯輸出,相比較而言還是第一種比較方便。

二、簡單介紹以下幾個巨集:

1) __VA_ARGS__ 是一個可變引數的巨集,這個可變引數的巨集是新的C99規範中新增的,目前似乎只有gcc支援(VC6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的","去掉,否則會編譯出錯。
2) __FILE__ 巨集在預編譯時會替換成當前的原始檔名
3) __LINE__巨集在預編譯時會替換成當前的行號
4) __FUNCTION__巨集在預編譯時會替換成當前的函式名稱



相關文章