使用NSLog的一個風(fēng)險是:它的運(yùn)行會占用時間和設(shè)備資源。
簡單而粗暴的解決方案是:在release前,將所有的NSLog注釋掉。簡單有效,但副作用是:下次你要調(diào)試時,又得將NSLog一個個取消注釋。
以release模式編譯的程序不會用NSLog輸出,而以debug模式編譯的程序?qū)?zhí)行NSLog的全部功能。
解決步驟:
- 修改<AppName>-Prefix.pch ,增加以下的宏代碼
- #ifdef DEBUG
- # define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函數(shù)名:%s]\n" "[行號:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
- #else
- # define DLog(...);
- #endif
- 在程序中使用DLog來替換原來的NSLog
- DLog(@"當(dāng)前程序目錄是:%@", [self applicationDocumentsDirectory ]);
- 修改項目的配置,使得在debug編譯的時候,編譯DLog的宏,產(chǎn)生詳細(xì)的日志信息,而release的時候,不產(chǎn)生任何控制臺輸出
在Other Linker Flags 中,在debug的時候,加入編譯屬性 -DEBUG
在Xcode 4.6.3 和 skd 6.1 的時候, "DEBUG"在 "Target > Build Settings > Preprocessor Macros > Debug" 里有一個"DEBUG=1"。進(jìn)行定義
- 這樣控制臺會顯示這樣的日志信息
- 2011-12-27 22:23:53.303 IManager[5449:b603] [文件名:/Users/roamer/Project/??Ωê≥∞?ê???a/?ê·‰∏?èé?á?°áêüiphone/IManager/IManager/AppDelegate.m]
- [函數(shù)名:-[AppDelegate application:didFinishLaunchingWithOptions:]]
- [行號:37]
- 當(dāng)前程序目錄是:/Users/roamer/Library/Application Support/iPhone Simulator/4.3.2/Applications/6B0E7B08-5528-468A-B728-0C4580805368/Documents
補(bǔ)充:
1) __VA_ARGS__ 是一個可變參數(shù)的宏,很少人知道這個宏,這個可變參數(shù)的宏是新的C99規(guī)范中新增的,目前似乎只有g(shù)cc支持(VC6.0的編譯器不支持)。宏前面加上##的作用在于,當(dāng)可變參數(shù)的個數(shù)為0時,這里的##起到把前面多余的","去掉的作用,否則會編譯出錯, 你可以試試。
2) __FILE__ 宏在預(yù)編譯時會替換成當(dāng)前的源文件名
3) __LINE__宏在預(yù)編譯時會替換成當(dāng)前的行號
4) __FUNCTION__宏在預(yù)編譯時會替換成當(dāng)前的函數(shù)名稱
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。