介紹NSLog的使用

來源:互聯網
上載者:User
文章目錄
  • NSLog的定義
  • 樣本
  • 輸出:
  • 格式

 

NSLog的定義

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的格式如下所示:

 

  • %@     對象
  • %d, %i 整數
  • %u     無符整形
  • %f     浮點/雙字
  • %x, %X 二進位整數
  • %o     八進位整數
  • %zu    size_t
  • %p     指標
  • %e     浮點/雙字 (科學計算)
  • %g     浮點/雙字 
  • %s     C 字串
  • %.*s   Pascal字串
  • %c     字元
  • %C     unichar
  • %lld   64位長整數(long long)
  • %llu   無符64位長整數
  • %Lf    64位雙字

 

使用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

原文:

http://blog.csdn.net/nicktang/article/details/6264713

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.