Just a Computer Graphics Studio & My Life

一般而言,寫程式的時候想要debug,通常會「把訊息印出」,在iOS上會用NSLog這個方法,或是在Xcode上「設定中斷點」。在開發的時候會不斷地用NSLog,一旦要釋出時就要把NSLog給刪掉,這是資深工程師的經驗建議,因為太多的印出資料不但會影響效能,還有很大的機率會讓程式當掉。

so many 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

廣告

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: