一般而言,寫程式的時候想要debug,通常會「把訊息印出」,在iOS上會用NSLog這個方法,或是在Xcode上「設定中斷點」。在開發的時候會不斷地用NSLog,一旦要釋出時就要把NSLog給刪掉,這是資深工程師的經驗建議,因為太多的印出資料不但會影響效能,還有很大的機率會讓程式當掉。
我用搜尋功能,一下子就找出非常多個NSLog~
我以為Debug模式寫一堆NSLog,可以方便開發是沒錯!不過在Release模式經由資深工程師提點,編譯器並不會幫我們消除NSLog。
於是還是要由我們自己去定義巨集,找到StackOverFlow的程式碼,可以這麼寫就不需要在釋出時,花時間註解掉NSLog。
#ifdef DEBUG # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else # define DLog(...) #endif // ALog always displays output regardless of the DEBUG setting #define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
以上程式碼表示,使用DLog的話,只會在Debug模式出現列印訊息,而使用ALog則是Debug模式和Release模式都會出現列印訊息~有空來試試看吧!未來debug會變得更容易!
範例顯示的輸出如:
2013-08-01 19:04:36.856 HappyApp[19540:707] -[HACollectionViewController viewWillAppear:] [Line 58] HappyMan1~
2013-08-01 19:04:37.135 HappyApp[19540:aa03] __45-[HACollectionViewController viewWillAppear:]_block_invoke [Line 66] HappyMan2
2013-08-01 19:04:37.164 HappyApp[19540:cd07] __45-[HACollectionViewController viewWillAppear:]_block_invoke_2 [Line 90] HappyMan3
除了原本該有的日期時間和APP名稱之外,哪個Controller和Method甚至行號都有!而我這例子是放在block中顯示,Method中有兩個block,所以會再接續序號。
參考:iPhone/iPad : Does having many NSLog() calls affect app preformance or memory?、Making NSLog more informative。

隨意留個言吧:)~