什么是“toString()”的Objective-C等价物,用于NSLog?

有没有一种方法,我可以重写我的自定义类,以便何时

NSLog(@"%@", myObject) 

被称为,它会打印我的对象的领域(或任何我认为重要的)? 我想我正在寻找Java的toString()的Objective-C等价物。

它是description实例方法,声明如下:

 - (NSString *)description 

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

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

将其添加到Photo类的@implementation中:

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

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

 - (NSString *)description 

关于日志logging的问题,我推荐这个博客文章来更好地loggingObjective-C。

有两个function,你可以使用。

 - (NSString*)description 

当你把你的对象作为IE浏览器的一个参数时,这个会显示出来。 其他描述function是:

 - (NSString*)debugDescription 

这将在debugging命令窗口中执行po anInstanceOfYourClass时调用。 如果你的类没有debugDescription函数,那么只会调用description

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

这将输出可用的声音:

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