読者です 読者をやめる 読者になる 読者になる

24/7 twenty-four seven

iOS/OS X application programing topics.

NSObject:description メソッドを簡単に実装できる DescriptionBuilder を公開しました。

iPhone Objective-C Cocoa

kishikawakatsumi/DescriptionBuilder · GitHub

NSObject クラスの description メソッドをオーバーライドしておくと、NSLog で出力できたりしてデバッグ時に便利です。
ただ、出力する項目が増えてくると、結構な手間になるので、リフレクションを使って自動ですべてのインスタンス変数を出力できるようにしてみました。


このクラスを使うと、description メソッドは次のように書けます。

- (NSString *)description {
    return [DescriptionBuilder reflectDescription:self];
}


このようなオブジェクトの場合、デフォルトでは下記のようにフォーマットされて出力されます。

@interface Settings : NSObject {
    NSUInteger version;
    BOOL autoLock;
    BOOL twentyFourHourTime;
    NSString *alarmSound;
    float alarmVolume;
}
@end
<Settings: 0xd188b0; version = 100; autoLock = NO; twentyFourHourTime = YES; alarmSound = "digital-alarm"; alarmVolume = 1.000000>


出力フォーマットは他に4種類の形式があります。
デフォルト以外の形式で出力するには、下記のようにスタイルを指定します。

- (NSString *)description {
    return [DescriptionBuilder reflectDescription:self style:DescriptionStyleMultiLine];
}
Multi Line Style
<Settings: 0xd188b0;
version = 100;
autoLock = NO;
twentyFourHourTime = YES;
alarmSound = "digital-alarm";
alarmVolume = 1.000000>
No Name Style
<Settings: 0xd188b0; 100; NO; YES; "digital-alarm"; 1.000000>
Short Prefix Style
<Settings; version = 100; autoLock = NO; twentyFourHourTime = YES; alarmSound = "digital-alarm"; alarmVolume = 1.000000>
Simple Style
<100; NO; YES; "digital-alarm"; 1.000000>