LoginSignup
169
168

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-05-22

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ファイルに書くと各ファイルでも利用する事が可能になります。

以上です。

169
168
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
169
168