今天在各種搞自定義宏,替換NSLog。修改宏的次數特別多。大家都知道修改任意一個宏,項目就要重新編譯。原來項目編譯一次只要5秒鐘,只要你修改一個宏,編譯一次就要25秒鐘,5倍,很嚇人。大家還是慎用宏。可以參考我原來的文章OC中extern、static、const和宏定義
寫這篇文章的時候需要頻繁Edit scheme 這里告訴你們快接鍵command + shift + , 不用快捷鍵打開太慢了,你調試完自定義log就可以忘了這個快捷鍵了。
下面就是對應的方法了。找一個類定義兩個方法
/*
獲取當前事件,自定義log使用, yyyy-MM-dd HH:mm:ss
*/
NSString* currentTime(){
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *currentTime = [formatter stringFromDate:[NSDate date]];
return currentTime;
}
/*
獲取當前項目名稱,自定義log使用,
*/
NSString* projectName(){
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString *projectName = [infoDictionary objectForKey:(NSString *)kCFBundleExecutableKey];
return projectName;
}
然后在pch文件中定義宏
#ifndef __OPTIMIZE__ //DEBUG 模式
//#ifdef DEBUG //DEBUG 模式
#define VCLog(...) printf("%s %s %s\n",[currentTime() UTF8String],[projectName() UTF8String],[[NSString stringWithFormat:__VA_ARGS__]UTF8String]);
#else
#define VCLog(...) //Release 不輸出log,節省資源
#endif
一定要調用UTF8String
方法,否則會亂碼。
這里對__OPTIMIZE__
做一下解釋,這個宏是Release模式下系統定義的宏,所以可以根據這個來判斷當前是不是release模式。
這里教大家一個裝逼的方法來定義宏,但是沒什么卵用,僅僅是用來裝逼
image.png
這里的下劃線是拼接的作用,可以實現一樣的效果。
tips
這里解決下#ifdef DEBUG
不起作用的情況
image.png
按照如圖所示的步驟檢查一下,你這個位置是不是設置了DEBUG這個宏。這里的宏你是可以隨意添加的。
我的項目剛開始就是因為這里沒有添加DEBUG導致
#ifdef DEBUG
不起作用,然后不得已用#ifndef __OPTIMIZE__
進行了替換,現在可以放心的使用#ifdef DEBUG
了。