web-dev-qa-db-ja.com

ObjectiveCのSYSLogステートメントとPrintfステートメントの違い

Objective-CのNSLogステートメントとPrintfステートメントの違いについて知りたい(アプリケーションの目的で...!)

すべての開発者がNSLogの代わりにPrintfを使用するのはなぜですか?

どちらも似ていますが、内部作業の違いは何ですか?

どの時点でそれらを区別できますか?

21
Rushi3311
  • printf()はC標準ライブラリ関数であり、フォーマット引数としてC文字列定数(_const char *_)を受け入れます。 printf()はstdoutに書き込みます。

  • NSLog()はFoundation関数であり、定数NSStringをフォーマットとして受け入れ、拡張フォーマット指定子セットがあります(たとえば、printf()は_%@_で指定されたオブジェクトを出力しません。 NSLog()は行います)。 NSLog()は、実際の形式を出力してsdterrに書き込む前に、プロセス名と日付も出力します。

基本的に、NSLog()はObjective-C(より正確にはCocoaとCocoa Touch)および特定の目的のための拡張されたprintf()スタイル関数であると言えます。

31
user529758

NSLogはprintfに似ていますが、もう少し機能します。

  • タイムスタンプが出力に追加されます。
  • 出力は、Xcodeコンソール、またはstderrとして定義されているものに送信されます。
  • すべてのprintf指定子を受け入れますが、オブジェクトのdescriptionメソッドによって提供される文字列を表示するオブジェクトの@演算子も受け入れます。 (descriptionはNSObjectの一部であるため、すべてのオブジェクトがそれをオーバーライドして、オブジェクトを説明する文字列を返すことができます)。
  • 出力は、Apple System Log(ASL)にも送信されます。これは、Appleのsyslogdのバージョンです。このデータは、C APIを使用する他のアプリケーション、またはを使用するOSXユーザーが読み取ることができます。アプリケーション「コンソール」。
26
Abizern

開発者の観点から見ると、最大の違いは、NSLogが%@形式でObjective-Cオブジェクトタイプをサポートしていることです。 NSLogはstderrにも書き込みますが、printfはstdoutに書き込みます。

9
Catfish_Man

NSLogprintfの間に2つの主な違いがあります。

  1. NSLogは、%@拡張子を介してNSStringオブジェクトをサポートします。

  2. さらに、NSLogは時間とプロセスのデータを自動的に追加します(例:2012-01-25 17:52:10.479 process [906:707])

3
sergio