你好,你能给我一个使用这个方法的例子
+(NSString *)description
我是否将描述与NSObject(任何类型的对象)或NSString的实例一起使用?
还是在没有实例的情况下使用,直接使用NSObject(任何类型的对象)或NSString?
答案 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
的所有子类都继承了这两种方法,并且可以像其他方法一样覆盖它们。例如,请注意NSDictionary
和NSArray
格式化自己并将description
发送到它们包含的对象。
还应注意,使用NSLog()
时,%@
格式说明符会导致description
发送到其参数(无论是类对象还是实例) )。
答案 3 :(得分:2)
通常最常用的电话
- (NSString *)description;
它用于正常实例,而不是类。它可以在自定义类中重写,以提供有关对象的详细信息。如果您尝试以字符串形式访问类,则会自动调用description方法。
NSLog(@"array: %@", array); //Identical
NSLog(@"array: %@", [array description]); //Identical
您可以按照说明
在课程中使用它[NSArray description];
答案 4 :(得分:1)
+(NSString *)description
主要用于调试,由实例使用。它允许打印对象的描述。