.21 2011

NSLogを使う

どうも。
hayateです。

今日はデバッグの基本”ログ出し”についてメモっときますです。

Objective-Cでログ出しといえばNSLogです。

void NSLog (
NSString *format,
... );


この「NSString *format, ...」をうまく使って効果的なログを出力しましょう。
C言語のprintfと同じ感覚で使えます。
リファレンス(NSString フォーマットについて)はこちら

よく使うものは以下4つかな。

 %@ :Objective-Cのオブジェクト(NSStringとか)
 %d :整数(intとか)
 %f :浮動小数点(doubleとかfloatとか)
    %.3fと指定することで桁数を指定できる
 %s :言語の文字列(NULLターミネートされた文字列)


■便利な使い方

 C言語の定義済みマクロ

 __FILE__  :ファイル名
 __LINE__  :行数
 __func__  :関数/メソッド名(__PRETTY_FUNCTION__でも可)
 ※注意:__FILE__、__func__はNSStringではなくC言語の文字列なので%sを使う。__LINE__は%d。

いろんな場所でNSLogを使ってると、どのログがどこで出力されたものか判別しづらくなります。そこで、この定義済みマクロを上手に使ってどこで出力したログかをはっきりさせます。


 Objective-Cのオブジェクトを%@で出力

 例:
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSLog(@"%@", array);

 結果:
2011-02-21 16:12:22.540 Test[2665:207] (
  one,
  two,
  three
)

これを使うと、NSArrayやNSDictionaryの中身をドーンと吐き出せます。

Objective-Cのオブジェクトをフォーマットの引数に与えると、自動的にそのオブジェクトのdescriptionWithLocale:もしくはdescriptionメソッドが実行され、オブジェクトの内容が文字列で出力されます。NSArrayやNSDictionaryなどは、自身が持つデータの内容を文字列で吐き出すように作られているため上のような結果になるわけです。
自前のクラスの場合、descriptionをオーバーライドして、イイ感じの文字列を吐くようにしておく必要があります。
ちなみに、descriptionWithLocale:とdescriptionはNSObjectのメソッド。

 便利な変換関数

 NSString * NSStringFromCGRect ( CGRect rect )
 NSString * NSStringFromCGPoint ( CGPoint point )
 NSString * NSStringFromCGSize ( CGSize size )

CGRectなどをNSStringに変換してくれる関数が用意されています。UIViewの領域がどうなってるか知りたいってことはよくあります。そんな時に活躍する関数ですね。
他にもいろいろあるのでXcodeのエディタ上でNSStringFromまで入力してescを押してみるとよいです。

余談ですけど、逆変換もできます
CGPointFromString(@"{3.0,2.5}")
これでCGPointが返る。

便利関数のリファレンスはこちら


とまぁ、こんなもんです。
欲を言えば、こいつらを駆使したログ出力マクロを作っておくといいですね。

では。

関連記事
スポンサーサイト



Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/172-85cdaaf6

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク