24/7 twenty-four seven

iOS/OS X application programing topics.

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

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>