什么是“toString()”的Objective-C等价物,与NSLog一起使用?

时间:2009-07-09 15:44:47

标签: objective-c tostring nslog

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

      NSLog(@"%@", myObject) 
调用

,它会打印我的对象的字段(或者我认为重要的任何字段)?我想我正在寻找与Java toString()相同的Objective-C。

6 个答案:

答案 0 :(得分:247)

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

- (NSString *)description

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

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

答案 1 :(得分:35)

将其添加到Photo类的@implementation

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}

答案 2 :(得分:24)

您可以覆盖NSObject的描述方法:

- (NSString *)description

关于日志记录的主题,我建议使用blog post以更好地登录Objective-C。

答案 3 :(得分:13)

您可以使用两种功能。

- (NSString*)description

当您将对象放入时,将显示此内容。 NSLog的参数。其他描述功能是:

- (NSString*)debugDescription

当您在调试命令窗口中执行po anInstanceOfYourClass时,将调用此方法。如果您的班级没有debugDescription功能,则只会调用description

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

答案 4 :(得分:1)

这将输出可用的声音:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));

答案 5 :(得分:0)

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

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

避免覆盖说明-如果此方法在 调试操作,结果可能无法预测。