你好,你能给我一个这个方法的用法的例子吗
+(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
并NSArray
格式化自己并发description
送到它们包含的对象。
还应该注意的是,当使用 时NSLog()
,%@
格式说明符会导致description
发送到其参数(无论是类对象还是实例)。
最常用的调用实际上使用它
- (NSString *)description;
它用于通常的实例,而不是类。它可以在自定义类中被覆盖以提供有关对象的详细信息。如果你试图以字符串的形式访问一个类,描述方法将被自动调用。
NSLog(@"array: %@", array); //Identical
NSLog(@"array: %@", [array description]); //Identical
正如您所说,您可以在课程中使用它
[NSArray description];
+(NSString *)description
主要用于调试,由实例使用。它允许打印对象的描述。