介紹NSLog的使用

2021-06-07 05:14:32 字數 1187 閱讀 9232

nslog定義在nsobjcruntime.h中,如下所示:

void nslog(nsstring *format, …);

基本上,nslog很像printf,同樣會在console中輸出顯示結果。不同的是,傳遞進去的格式化字元是nsstring的物件,而不是chat *這種字串指標。

nslog可以如下面的方法使用:

nslog (@"this is a test");

nslog (@"string is :%@", string);

nslog (@"x=%d, y=%d", 10, 20);

但是下面的寫法是不行的:

int i = 12345;

nslog( @"%@", i );

原因是, %@需要顯示物件,而int i明顯不是乙個物件,要想正確顯示,要寫成:

int i = 12345;

nslog( @"%d", i );

2009-03-23 11:01:32.936 debuglog[12085:807] hello, world!

上面的資訊依次為時間,程序名稱,程序id,執行緒id,log的內容。

nslog的格式如下所示:

使用nslog的乙個風險是:它的執行會占用時間和裝置資源。當我們用simulator時,nslog的資源占用並不引人注意,風險也不會顯示出來。但是如果你寫的是乙個即時戰略遊戲,而你在每乙個action中都加入了nslog——那麼nslog將成為乙個魔鬼。災難的具體表現常常是:你在simulator中執行遊戲暢通無阻,但到了真機上,會發現很「卡」,不論是拖動乙個單位還是縮放乙個場景,fps也降到了各位數。

簡單而粗暴的解決方案是:在乙個遊戲release前,將所有的nslog注釋掉。簡單有效,但***是:下次你要除錯時,又得將nslog乙個個取消注釋。

我找到了乙個最為有效的解決方案:你以release模式編譯的程式不會用nslog輸出,而你以debug模式編譯的程式將執行nslog的全部功能。

#ifndef __optimize__

# define nslog(…) nslog(__va_args__)

#else

# define nslog(…) {}

#endif

這個**的魔術在於:release模式通常會定義 __optimize__,當然debug模式不會。將這段**放在你的標頭檔案當中,你就可以放心的使用nslog了!

介紹NSLog的使用

nslog定義在nsobjcruntime.h中,如下所示 void nslog nsstring format,基本上,nslog很像printf,同樣會在console中輸出顯示結果。不同的是,傳遞進去的格式化字元是nsstring的物件,而不是chat 這種字串指標。nslog可以如下面的方法...

介紹NSLog的使用

nslog的定義 nslog定義在nsobjcruntime.h中,如下所示 void nslog nsstring format,基本上,nslog很像printf,同樣會在console中輸出顯示結果。不同的是,傳遞進去的格式化字元是nsstring的物件,而不是chat 這種字串指標。示例 n...

介紹NSLog的使用

nslog定義在nsobjcruntime.h中,如下所示 void nslog nsstring format,基本上,nslog很像printf,同樣會在console中輸出顯示結果。不同的是,傳遞進去的格式化字元是nsstring的物件,而不是chat 這種字串指標。nslog可以如下面的方法...