カスタムクラスでオーバーライドできるメソッドはありますか?
NSLog(@"%@", myObject)
呼ばれると、それは私のオブジェクトのフィールド(または私が重要だと思うもの)を印刷しますか?JavaのObjective-Cに相当するものを探していると思いtoString()
ます。
カスタムクラスでオーバーライドできるメソッドはありますか?
NSLog(@"%@", myObject)
呼ばれると、それは私のオブジェクトのフィールド(または私が重要だと思うもの)を印刷しますか?JavaのObjective-Cに相当するものを探していると思いtoString()
ます。
回答:
これは、次のdescription
ように宣言されたインスタンスメソッドです。
- (NSString *)description
以下は実装例です(grahamparksに感謝):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
debugDescription
も予約?DebugDescription
LLDBのようなデバッガーで使用されることになっていると思いますが。
これを@implementation
Photoクラスのに追加します。
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
NSObjectの記述メソッドをオーバーライドできます:
- (NSString *)description
ロギングについては、Objective-Cでのロギングを改善するために、このブログ投稿をお勧めします。
使用できる機能は2つあります。
- (NSString*)description
これは、オブジェクトをIEのパラメータとして配置したときに表示されますNSLog
。その他の記述関数は次のとおりです。
- (NSString*)debugDescription
これはpo anInstanceOfYourClass
、デバッグコマンドウィンドウで実行したときに呼び出されます。クラスにdebugDescription
関数がない場合は、description
呼び出されます。
基本クラスNSObject
はdescription
実装されていますが、それはかなり基本的なものであることに注意してください。オブジェクトのアドレスを表示するだけです。このためdescription
、特にdescription
コードでメソッドを使用する場合は、情報を取得したいクラスに実装することをお勧めします。description
コードで使用する場合はdebugDescription
、同様に実装して、debugDescription
さらに冗長にすることをお勧めします。
description
プロパティは予約されており、役立つデバッグ情報を提供します。その場合は、独自のメソッド名を作成する必要があります。