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继承了这两种方法,并且它们可以像其他任何方法一样被覆盖。例如,请注意NSDictionaryNSArray格式化自己并发description送到它们包含的对象。

还应该注意的是,当使用 时NSLog()%@格式说明符会导致description发送到其参数(无论是类对象还是实例)。

于 2012-08-07T20:23:58.347 回答
2

最常用的调用实际上使用它

- (NSString *)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 回答