NSLogの基本的な使い方まとめ

ObjCSTD

iOSアプリの開発にはNSLogがかかせません。

NSLogは、変数の中身を確認したり、条件分岐が正常に行われているのかなど確認するために使います。NSLogの出力結果は、デバックエリアに表示されます。

シンプルに文字列を表示する。

まずはおさらい。単純に決まった文字列のみを表示させたいのならば、

// 文字列の表示
NSLog(@"こんにちは!");

->出力結果:こんにちは!

というようになります。

置換文字列を使って変数の中身を表示する



変数の中身を表示するには、置換文字列(フォーマット指定子、%@、%dなど)を使い以下のように書きます。まずは文字列を出力する場合の例です。


NSString *str = @"素敵です";
NSLog(@"小松さんは、%@",str);

-> 出力結果:小松さんは、素敵です

数値を出力する場合は次のように書きます。


int age = 28;
NSLog(@"年齢は%d歳です。",age);

-> 出力結果:年齢は28歳です。

小数型で出力をする場合は以下のようにします。


float bodyHeight = 185.5;
NSLog(@"身長は%fcmです。",bodyHeight);

-> 出力結果:身長は185.500000cmです。

ちなみに、小数点2桁まで表示させたい場合は、次のようにします。


float bodyHeight = 185.5;
NSLog(@"身長は%.2fcmです。",bodyHeight);

また、以下のように複数の変数を同時に表示することもできます。


int age = 28;
float bodyHeight = 185.5;
NSString *str = @"パパ";
NSLog(@"小松さんの年齢は%d歳です。身長は%.1fcmです。素敵な%@ですね。",age,bodyHeight,str);

  -> 出力結果:小松さんの年齢は28歳です。身長は185.5cmです。素敵なパパですね。


オブジェクトの中身を出力

また、%@はNSStringの中身の文字列を表示したように、オブジェクトの中身を表示させるために使います。NSArrayやNSDictionaryなど配列や辞書に含まれる内容も表示させることができます。


NSArray *arr = @[@"David Bowie",@"Marc Bolan",@"Roxy Music"];
NSLog(@"配列の中身は、%@",arr);

->出力結果:

配列の中身は、(
    "David Bowie",
    "Marc Bolan",
    "Roxy Music"
)

C言語のマクロを使う。

ここまでは、プログラミング初心者の方でも理解している方も多いと思います。C言語のマクロを使うと、もうちょっと賢くデバッグすることができます。

__func__というマクロを利用することで、NSLogが実行されたクラス名とメソッド名をログに出力することができます。該当箇所のメソッドが実行されたかどうかを素早く調べたい場合に便利です。フォーマット指定子がC言語用の%sになることに注意してください。


NSLog(@"%s", __func__);

->出力結果:[TestViewController viewDidLoad]

NSLogが実行されたクラスのファイルパスを表示するための__FILE__マクロというのもあります。


NSLog(@"%s", __FILE__);

->出力結果:/Users/komatsu/Desktop/Test/ViewController.m

続いて、NSLogが実行されたファイルの行番号を表示するのが__LINE__マクロです。単体で使うとわかりにくですが、__func__と組み合わせてif文などの条件分岐をチェックする際に便利です。

NSLog(@"%d", __LINE__);

-> 出力結果:1220

私は、__func__マクロをよく使います。#define でヘッダー(.hファイル)や.pchファイルに以下のように記述すると、

#define LOG_FUNC NSLog(@"%s", __func__)

使いたいところで


LOG_FUNC;

とすれば、クラス名とメソッド名のログが簡単に表示されるようになるのでお勧めです。
最後に、コールスタックを表示するための方法を説明します。デバッガを使えば表示の確認はできますが、処理確認など手軽に行うことができるので便利です。


NSLog(@"%@", [NSThread callStackSymbols]);

以下が、出力結果のサンプルです。

2013-11-13 00:10:33.084 Sample[1465:907] (
 0   Sample                              0x000f136f -[ViewController viewDidLoad] + 118
 1   UIKit                               0x35578595 <redacted> + 364
 2   UIKit                               0x355b8d79 <redacted> + 64
 3   UIKit                               0x355b4aed <redacted> + 364
 4   UIKit                               0x355f61e9 <redacted> + 60
 5   Sample                              0x000f1135 -[AppDelegate application:didFinishLaunchingWithOptions:] + 672
 6   UIKit                               0x355b9ad9 <redacted> + 252
 7   UIKit                               0x355b9663 <redacted> + 1190
 8   UIKit                               0x355b184b <redacted> + 698
 9   UIKit                               0x35559c39 <redacted> + 1004
 10  UIKit                               0x355596cd <redacted> + 72
 11  UIKit                               0x3555911b <redacted> + 6154
 12  GraphicsServices                    0x3724d5a3 <redacted> + 590
 13  GraphicsServices                    0x3724d1d3 <redacted> + 34
 14  CoreFoundation                      0x33726173 <redacted> + 34
 15  CoreFoundation                      0x33726117 <redacted> + 138
 16  CoreFoundation                      0x33724f99 <redacted> + 1384
 17  CoreFoundation                      0x33697ebd CFRunLoopRunSpecific + 356
 18  CoreFoundation                      0x33697d49 CFRunLoopRunInMode + 104
 19  UIKit                               0x355b0485 <redacted> + 668
 20  UIKit                               0x355ad301 UIApplicationMain + 1120
 21  Sample                              0x000f0e79 main + 116
 22  libdyld.dylib                       0x3ba2cb20 <redacted> + 0
)

#cloud9apps
UIデザインとマーケティング、電子書籍に特化したiPhoneアプリ開発スクール「クラウドナインアップス」はこちら

  • このエントリーをはてなブックマークに追加

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

お手軽連続再生

ページ上部へ戻る