iOS開發:pch檔案中的巨集定義
一、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__巨集在預編譯時會替換成當前的函式名稱
相關文章
- ios開發的巨集定義iOS
- iOS開發:建立pch檔案iOS
- pch檔案的使用, 標頭檔案使用, 常量(const)的定義,以及一些常用的巨集定義
- iOS-日常開發常用巨集定義iOS
- C語言中的標頭檔案中的巨集定義C語言
- iOS常用巨集定義iOS
- iOS開發技巧:應用巨集定義使用字型iOS
- iOS 通用巨集定義 高效全域性巨集彙總iOS
- iOS 程式設計 PCH檔案 配置注意iOS程式設計
- 跨平臺開發,各種巨集的定義
- pch檔案的使用
- iOS 官方巨集定義 - “引入”、“廢棄”iOS
- iOS開發常用的巨集iOS
- iOS標頭檔案中如何在巨集裡引用已有的巨集iOS
- pch檔案配置
- iOS開發常用巨集,持續更新中iOS
- C++中巨集定義#define的用法C++
- Swift 裡的巨集定義Swift
- 在Xcode中手動新增pch檔案XCode
- Xcode 新增PCH檔案XCode
- C語言巨集定義中#define中的井號#的使用C語言
- 如何新增 .PCH OR PREFIX.PCH 檔案到 XCODE 6?XCode
- C語言(巨集定義)C語言
- C++巨集定義#defineC++
- iOS 常用巨集定義大全iOS
- libev中ev_loop結構體中巨集定義的理解OOP結構體
- 敏捷開發中如何定義“完成”?敏捷
- 使用ant巨集定義任務
- VC++實用巨集定義C++
- 059.Define 巨集定義的巢狀巢狀
- define巨集定義和const常量定義之間的區別
- iOS開發-NSURLSession檔案上傳iOSSession
- 在 MotionScene 檔案中定義場景約束
- c 語言中巨集定義和定義全域性變數的區別變數
- 關於malloc原始碼中的bin_at巨集定義的個人見解原始碼
- iOS開發中利用AFNetworking下載大檔案以及下載檔案的刪除iOS
- Xcode-新增pch預編譯檔案XCode編譯
- iOS 開發之解析Json檔案iOSJSON