Objective-CのNSLog
ステートメントとPrintf
ステートメントの違いについて知りたい(アプリケーションの目的で...!)
すべての開発者がNSLog
の代わりにPrintf
を使用するのはなぜですか?
どちらも似ていますが、内部作業の違いは何ですか?
どの時点でそれらを区別できますか?
printf()
はC標準ライブラリ関数であり、フォーマット引数としてC文字列定数(_const char *
_)を受け入れます。 printf()
はstdoutに書き込みます。
NSLog()
はFoundation関数であり、定数NSStringをフォーマットとして受け入れ、拡張フォーマット指定子セットがあります(たとえば、printf()
は_%@
_で指定されたオブジェクトを出力しません。 NSLog()
は行います)。 NSLog()
は、実際の形式を出力してsdterrに書き込む前に、プロセス名と日付も出力します。
基本的に、NSLog()
はObjective-C(より正確にはCocoaとCocoa Touch)および特定の目的のための拡張されたprintf()
スタイル関数であると言えます。
NSLogはprintfに似ていますが、もう少し機能します。
description
メソッドによって提供される文字列を表示するオブジェクトの@
演算子も受け入れます。 (description
はNSObjectの一部であるため、すべてのオブジェクトがそれをオーバーライドして、オブジェクトを説明する文字列を返すことができます)。開発者の観点から見ると、最大の違いは、NSLogが%@形式でObjective-Cオブジェクトタイプをサポートしていることです。 NSLogはstderrにも書き込みますが、printfはstdoutに書き込みます。
NSLog
とprintf
の間に2つの主な違いがあります。
NSLog
は、%@
拡張子を介してNSString
オブジェクトをサポートします。
さらに、NSLog
は時間とプロセスのデータを自動的に追加します(例:2012-01-25 17:52:10.479 process [906:707])