今天在各種搞自定義宏,替換NSLog。修改宏的次數(shù)特別多。大家都知道修改任意一個(gè)宏,項(xiàng)目就要重新編譯。原來(lái)項(xiàng)目編譯一次只要5秒鐘,只要你修改一個(gè)宏,編譯一次就要25秒鐘,5倍,很?chē)樔?。大家還是慎用宏??梢詤⒖嘉以瓉?lái)的文章OC中extern、static、const和宏定義
寫(xiě)這篇文章的時(shí)候需要頻繁Edit scheme 這里告訴你們快接鍵command + shift + , 不用快捷鍵打開(kāi)太慢了,你調(diào)試完自定義log就可以忘了這個(gè)快捷鍵了。
下面就是對(duì)應(yīng)的方法了。找一個(gè)類(lèi)定義兩個(gè)方法
/*
獲取當(dāng)前事件,自定義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;
}
/*
獲取當(dāng)前項(xiàng)目名稱(chēng),自定義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,節(jié)省資源
#endif
一定要調(diào)用UTF8String方法,否則會(huì)亂碼。
這里對(duì)__OPTIMIZE__做一下解釋,這個(gè)宏是Release模式下系統(tǒng)定義的宏,所以可以根據(jù)這個(gè)來(lái)判斷當(dāng)前是不是release模式。
這里教大家一個(gè)裝逼的方法來(lái)定義宏,但是沒(méi)什么卵用,僅僅是用來(lái)裝逼

image.png
這里的下劃線(xiàn)是拼接的作用,可以實(shí)現(xiàn)一樣的效果。
tips
這里解決下#ifdef DEBUG不起作用的情況

image.png
按照如圖所示的步驟檢查一下,你這個(gè)位置是不是設(shè)置了DEBUG這個(gè)宏。這里的宏你是可以隨意添加的。
我的項(xiàng)目剛開(kāi)始就是因?yàn)檫@里沒(méi)有添加DEBUG導(dǎo)致
#ifdef DEBUG不起作用,然后不得已用#ifndef __OPTIMIZE__進(jìn)行了替換,現(xiàn)在可以放心的使用#ifdef DEBUG了。