Skip to content

インスタンスのログをカスタマイズする

2010.11.14

開発時、インスタンスの状況を把握するためにログを吐かせることがありますが、自作クラスでも分かりやすいログが吐かれるようにしておくと開発の効率が上がります。

今回は、ログをカスタマイズする方法を紹介します。


今回は、自作クラスとして RLRPerson クラスを用意しました。

@interface RLRPerson : NSObject
{
    NSString *_firstName;
    NSString *_lastName;
    NSString *_bloodType;
}

// Property
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (copy) NSString *bloodType;

@end

このクラスのインスタンスを作成しログを取ってみると、以下のようになります。

// Make person
RLRPerson *person;
person = [[RLRPerson alloc] init];
[person autorelease];
person.firstName = @"Kazki";
person.lastName = @"Miura";
person.bloodType = @"A";

// Log person
NSLog(@"person = %@", person);
// person = <RLRPerson: 0x100134fe0>

デフォルトでは、クラス名とインスタンスのアドレスが吐かれます。しかし、これだけではプロパティの値がどうなっているのかなどが分かりません。ということで、RLRPerson が吐くログをカスタマイズしたいと思います。カスタマイズするには、RLRPerson で description メソッドをオーバーライドします。

- (NSString*)description
{
    NSMutableString *description;
    description = [NSMutableString stringWithString:[super description]];
    [description appendString:@" : {"];
    [description appendFormat:@"\nfirstName = %@", self.firstName];
    [description appendFormat:@"\nlastName = %@", self.lastName];
    [description appendFormat:@"\nbloodType = %@", self.bloodType];
    [description appendString:@"\n}"];
    
    return description;
}

description メソッドをオーバーライドした上で、もう一度 person のログを取ると、以下のようになります。

person = <RLRPerson: 0x10043c510> : {
firstName = Kazki
lastName = Miura
bloodType = A
}

より分かりやすいログになりました。

モデルクラスを作ったときは特に、ログをカスタマイズしておくと便利なことが多いようです。

Advertisements

From → Develop

2 Comments
  1. 先日このGoogleでこのブログを拝見しました。とても分かりやすいです!RSSをすぐ購読しましたので、これからもよろしくお願いします~

    • 分かりやすいって言ってもらえると嬉しいです!

      これからも宜しくお願いします。
      何かあったら、また気軽にコメントしてくださいね。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s