173

是否有一种方法可以在我的自定义类中覆盖,这样当

      NSLog(@"%@", myObject) 

被调用,它将打印我的对象的字段(或我认为重要的任何内容)?我想我正在寻找与 Java 的toString().

4

6 回答 6

253

它是description实例方法,声明为:

- (NSString *)description

这是一个示例实现(感谢 grahamparks):

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
于 2009-07-09T15:49:57.497 回答
36

将此添加到@implementation您的 Photo 类中:

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
于 2009-07-09T15:57:15.703 回答
24

你可以重写 NSObject 的描述方法:

- (NSString *)description

关于日志记录,我推荐这篇文,以便更好地使用 Objective-C 进行日志记录。

于 2009-07-09T15:46:26.273 回答
13

您可以使用两个功能。

- (NSString*)description

这将在您将对象设置为 IE 的参数时显示NSLog。另一个描述函数是:

- (NSString*)debugDescription

这将在您po anInstanceOfYourClass在调试命令窗口中调用时调用。如果你的类没有debugDescription函数,那么description就会被调用。

请注意,基类NSObject确实已经description实现,但它相当简单:它只显示对象的地址。这就是为什么我建议您description在任何想要从中获取信息的类中实现,尤其是如果您description在代码中使用该方法。如果你确实description在你的代码中使用,我建议你也实现debugDescription,同时也debugDescription更加冗长。

于 2013-01-18T01:15:55.790 回答
1

这将输出可用的声音:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
于 2014-02-12T07:04:51.957 回答
0

我认为应该强调@Nuthatch 用CoreData(即继承NSManagedObject 的类)覆盖“描述”的评论

https://developer.apple.com/documentation/coredata/nsmanagedobject?language=objc

避免覆盖描述 - 如果此方法在调试操作期间触发错误,则结果可能无法预测。

于 2020-12-11T10:58:15.987 回答