是否有一种方法可以在我的自定义类中覆盖,这样当
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
关于日志记录,我推荐这个 blog post 以便更好地在 Objective-C 中进行日志记录。
您可以使用两个功能。
- (NSString*)description
这将在您将对象设置为 IE NSLog
的参数时显示。另一个描述函数是:
- (NSString*)debugDescription
这将在您在调试命令窗口中执行 po anInstanceOfYourClass
时调用。如果您的类没有 debugDescription
函数,则只会调用 description
。
请注意,基类 NSObject
确实实现了 description
,但它相当简单:它只显示对象的地址。这就是为什么我建议您在要从中获取信息的任何类中实现 description
,尤其是当您在代码中使用 description
方法时。如果您确实在代码中使用了 description
,我建议您也实现 debugDescription
,同时使 debugDescription
更加冗长。
这将输出可用的声音:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
我认为应该强调@Nuthatch 用CoreData(即继承NSManagedObject 的类)覆盖“描述”的评论
https://developer.apple.com/documentation/coredata/nsmanagedobject?language=objc
避免覆盖描述 - 如果此方法在调试操作期间触发错误,则结果可能无法预测。
description
属性 is reserved ...将提供有用的调试信息!在这种情况下,您需要提出自己的唯一方法名称。debugDescription
是否也保留?虽然我认为DebugDescription
应该由像 LLDB 这样的调试器使用。