[NSObject描述]

时间:2012-08-07 20:11:02

标签: objective-c ios c foundation

你好,你能给我一个使用这个方法的例子

+(NSString *)description

我是否将描述与NSObject(任何类型的对象)或NSString的实例一起使用?

还是在没有实例的情况下使用,直接使用NSObject(任何类型的对象)或NSString?

5 个答案:

答案 0 :(得分:18)

实例的描述为您提供有关您创建的特定实例的信息。

- (NSString *)说明;

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

为您提供有关此实例的信息(位于内存中的位置等)

另一方面:

+(NSString *)说明;

[NSString description];

为您提供有关NSString类的信息。

相同的规则适用于所有NSObject子类和符合NSObject协议的其他类,例如 NSArray NSDictionary * NSProxy *等

答案 1 :(得分: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"
}

答案 2 :(得分:4)

您似乎主要对类和实例方法之间的区别感到困惑。

NSObject声明了类方法 +[NSObject description],正如文档告诉你的那样,"返回一个表示接收类内容的字符串。&# 34 ;.如果您将消息description发送给类对象,如下所示:

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

将调用此方法,您将获得该类用于描述自身的字符串。

另一方面,NSObject protocol声明了一个必需的实例方法 -[id<NSObject> description],它将返回&#34;一个描述接收器内容的字符串&#34 ;。当您将其发送给实例时,您会得到一个表示它的字符串:

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发送到其参数(无论是类对象还是实例) )。

答案 3 :(得分:2)

通常最常用的电话

- (NSString *)description;

它用于正常实例,而不是类。它可以在自定义类中重写,以提供有关对象的详细信息。如果您尝试以字符串形式访问类,则会自动调用description方法。

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

您可以按照说明

在课程中使用它
[NSArray description];

答案 4 :(得分:1)

+(NSString *)description

主要用于调试,由实例使用。它允许打印对象的描述。