您好,您能给我一个这个方法用法的例子吗?
+(NSString *)description我应该对NSObject (任何类型的对象)或NSString的实例使用description吗?
或者我可以不使用实例,直接使用NSObject (任何类型的对象)或NSString?
发布于 2012-08-08 04:14:09
实例说明提供了有关您创建的特定实例的信息。
- (NSString *)描述;
NSString *string = [NSString alloc] initwithString:@"aString"]];
[string description];提供有关此实例的信息(内存中的位置等)
在另一边:
+ (NSString *)描述;
[NSString description];为您提供有关类NSString的信息。
相同的规则适用于所有NSObject子类和其他符合NSObject协议的类,如NSArray、NSDictionary *NSProxy*等
发布于 2012-08-08 04:23:37
假设我们有:
@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-08 04:23:58
您似乎主要对类方法和实例方法之间的区别感到困惑。
NSObject声明了类方法+[NSObject description],正如文档所说,它“返回一个表示接收类内容的字符串。”如果将消息description发送到类对象,如下所示:
[NSArray description];
[NSNumber description];
[[someObject class] description];此方法将被调用,您将获得该类用于描述其自身的字符串。
另一方面,NSObject 声明了一个必需的实例方法-[id 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发送给它的参数(无论是类对象还是实例)。
https://stackoverflow.com/questions/11853358
复制相似问题