Help us understand the problem. What is going on with this article?

NSLogをちょっと便利にするTips

More than 5 years have passed since last update.

iOS開発においてNSLogを利用する事が度々あると思いますが、
それらを少し便利するようなTipsのご紹介を。
※若干俺得感がありますが。

以前もブログに簡単に書いたのですが、記事が分かれてしまっていたので
まとめる意味も込めて。
iOS向け Xcode開発Tips入門編 -とりあえず最初にやってること-

【iOS】 Xcode開発Tips入門編その3 -NSLogあれこれ3つほど-

こちらにも紹介しましたが、マクロを使う事でよりログ出力がよりシンプルに
実装できます。

0. デバッグ時のみに出力し、リリース時には出力をしない。

NSLogで出力しているものをそのままリリースすると
だだ漏れするという問題が発生するので、

#ifndef DEBUG
#define NSLog(...) 
#endif 

などとする事で、デバッグ時以外は出力されなくなります。

1.出力時の関数名及び行数を出力させる

NSLogでは、

//クラス名及び関数名
NSLog(@"%s", __func__);

//クラス名及び関数名
NSLog(@"%s",__FUNCTION__);

//クラス名及び関数名
NSLog(@"%s",__PRETTY_FUNCTION__);

//行番号
NSLog(@"%d",__LINE__);

にようにする事で、関数名や行数を出力してくれます。

ただ毎回書くのは面倒なので、

#ifdef DEBUG
#define LOG(fmt,...) NSLog((@"%s %d "fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define NSLog(...) 
#endif 


と定義し、

LOG(@"hoge");

とすると、自動的に、関数名及び行数が表示されるようになります。

2.CGPoint/CGSize/CGRect などを一括で出力する。

NSLog(@"%@",NSStringFromCGRect(self.view.frame));
NSLog(@"%@",NSStringFromCGSize(self.view.frame.size));
NSLog(@"%@",NSStringFromCGPoint(self.view.frame.origin));

とこのように、NSStringFrom...系のメソッドを使うと、
出力する事が可能です。

ただこれらのメソッドは長いので、ちょっと使うのが億劫だったりしまして。。

なので、

#define LOGRect(RECT) NSLog(@"%@",NSStringFromCGRect(RECT));

と定義するなどして

LOGRect(self.view.frame);

などという利用もできます。
ちなみに、

NSStringFromClassなどのメソッドも用意されていて

NSLog(@"%@", NSStringFromClass([self class]));

などとするとクラス名を出力する事も可能です

3.コールスタック を出力する。

このあたりは、デバッグ時の一つの情報として

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

とするとコールスタックが出力する事が可能です。

おまけ xxx-Prefix.pchファイルに記述する。

ログに関する定義などはプロジェクト全体で利用したいため、
通常特定のヘッダファイルに書いたとしても、別のクラスなどでは
そのヘッダファイルをimportしない限りは利用する事ができません。

このようにプロジェクト全体にかかわるような記述は、
pchファイルに書くと各ファイルでも利用する事が可能になります。

以上です。

kitanoow
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした