こんにちは、このメソッドの使用例を教えてください
+(NSString *)description
NSObject (あらゆる種類のオブジェクト) または NSString のインスタンスで説明を使用しますか?
または、NSObject (あらゆる種類のオブジェクト) または NSString を直接使用して、インスタンスなしで使用しますか?
こんにちは、このメソッドの使用例を教えてください
+(NSString *)description
NSObject (あらゆる種類のオブジェクト) または NSString のインスタンスで説明を使用しますか?
または、NSObject (あらゆる種類のオブジェクト) または NSString を直接使用して、インスタンスなしで使用しますか?
インスタンスの説明は、作成した特定のインスタンスに関する情報を提供します。
- (NSString *) 説明;
NSString *string = [NSString alloc] initwithString:@"aString"]];
[string description];
このインスタンスに関する情報を提供します (メモリ内の場所など)
反対側:
+ (NSString *) 説明;
[NSString description];
クラス NSString に関する情報を提供します。
同じルールが、すべての NSObject サブクラスと、 NSObject プロトコルに準拠する他のクラス( NSArray、NSDictionary * NSProxy * など) に適用されます。
私たちが持っているとしましょう:
@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"
}
あなたは主に、クラス メソッドとインスタンス メソッドの違いについて混乱しているようです。
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
、これらのメソッドの両方を継承し、他のメソッドと同様にオーバーライドできます。たとえば、NSDictionary
andはNSArray
自分自身をフォーマットし、description
含まれるオブジェクトに送信することに注意してください。
NSLog()
また、 を使用する場合、%@
フォーマット指定子によってdescription
がその引数 (クラス オブジェクトであるかインスタンスであるか) に送信されることにも注意してください。
実際に一番普通に使った通話
- (NSString *)description;
クラスではなく、通常はインスタンスで使用されます。カスタム クラスでオーバーライドして、オブジェクトに関する詳細情報を提供できます。クラスに as as string としてアクセスしようとすると、description メソッドが自動的に呼び出されます。
NSLog(@"array: %@", array); //Identical
NSLog(@"array: %@", [array description]); //Identical
あなたが述べたように、あなたはクラスでそれを使うことができます
[NSArray description];
+(NSString *)description
主にデバッグに使用され、インスタンスによって使用されます。オブジェクトの説明を印刷できます。