5

こんにちは、このメソッドの使用例を教えてください

+(NSString *)description

NSObject (あらゆる種類のオブジェクト) または NSString のインスタンスで説明を使用しますか?

または、NSObject (あらゆる種類のオブジェクト) または NSString を直接使用して、インスタンスなしで使用しますか?

4

5 に答える 5

18

インスタンスの説明は、作成した特定のインスタンスに関する情報を提供します。

- (NSString *) 説明;

NSString *string = [NSString alloc] initwithString:@"aString"]];
[string description];

このインスタンスに関する情報を提供します (メモリ内の場所など)

反対側:

+ (NSString *) 説明;

[NSString description];

クラス NSString に関する情報を提供します。

同じルールが、すべての NSObject サブクラスと、 NSObject プロトコルに準拠する他のクラス( NSArrayNSDictionary * NSProxy * など) に適用されます。

于 2012-08-07T20:14:09.273 に答える
4

私たちが持っているとしましょう:

@interface randomObject : NSObject
{
    NSString  *yourString;
}

そしてどこか:

yourString = [[NSString alloc] initWithString:@"random text"];

次に、このようにオーバーライドできますrandomObject...

- (NSString *)description
{
  return [NSString stringWithFormat:@"%@", yourString];
}

これを行った後、NSObjectを使用してNSLogを呼び出すことができます。

-(void)viewDidLoad {
    randomObject *ourObj;

    ourObj = [[randomObject alloc] init];

    NSLog(@"%@", ourObj); //  this will output "random text"
}
于 2012-08-07T20:23:36.973 に答える
4

あなたは主に、クラス メソッドとインスタンス メソッドの違いについて混乱しているようです。

NSObjectクラスメソッド を宣言し+[NSObject description]ます。これは、ドキュメントにあるように、「受信クラスの内容を表す文字列を返します。」メッセージdescriptionをクラス オブジェクトに送信する場合は、次のようになります。

[NSArray description];
[NSNumber description];
[[someObject class] description];

このメソッドが呼び出され、クラスがそれ自体を記述するために使用する文字列を取得します。

一方、NSObject プロトコルは、「レシーバーの内容を説明する文字列」を返す必須のインスタンス メソッド を宣言します。-[id<NSObject> description]これをインスタンスに送信すると、それを表す文字列が取得されます。

NSNumber * n = [NSNumber numberWithInt:10];
[n description];
NSArray * arr = [NSArray arrayWithObjects:@"Lemon", @"curry", @"?", nil];
[arr description];
NSDicitonary * d = [NSDictionary dictionaryWithObject:arr forKey:n];
[d description]; 

のすべてのサブクラスはNSObject、これらのメソッドの両方を継承し、他のメソッドと同様にオーバーライドできます。たとえば、NSDictionaryandはNSArray自分自身をフォーマットし、description含まれるオブジェクトに送信することに注意してください。

NSLog()また、 を使用する場合、%@フォーマット指定子によってdescriptionがその引数 (クラス オブジェクトであるかインスタンスであるか) に送信されることにも注意してください。

于 2012-08-07T20:23:58.347 に答える
2

実際に一番普通に使った通話

- (NSString *)description;

クラスではなく、通常はインスタンスで使用されます。カスタム クラスでオーバーライドして、オブジェクトに関する詳細情報を提供できます。クラスに as as string としてアクセスしようとすると、description メソッドが自動的に呼び出されます。

NSLog(@"array: %@", array);               //Identical
NSLog(@"array: %@", [array description]); //Identical

あなたが述べたように、あなたはクラスでそれを使うことができます

[NSArray description];
于 2012-08-07T20:14:16.613 に答える
1
+(NSString *)description

主にデバッグに使用され、インスタンスによって使用されます。オブジェクトの説明を印刷できます。

于 2012-08-07T20:15:35.440 に答える