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可以如下面的方法...