【发布时间】:2010-11-09 10:30:12
【问题描述】:
有没有可以在我的自定义类中重写的方法,以便在何时
NSLog(@"%@", myObject)
被调用,它将打印我的对象的字段(或我认为重要的任何内容)?我想我正在寻找 Java 的 toString() 的 Objective-C 等价物。
【问题讨论】:
标签: objective-c tostring nslog
有没有可以在我的自定义类中重写的方法,以便在何时
NSLog(@"%@", myObject)
被调用,它将打印我的对象的字段(或我认为重要的任何内容)?我想我正在寻找 Java 的 toString() 的 Objective-C 等价物。
【问题讨论】:
标签: objective-c tostring nslog
是description的实例方法,声明为:
- (NSString *)description
这是一个示例实现(感谢 grahamparks):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
【讨论】:
description 属性 is reserved ... 将提供有用的调试信息!在这种情况下,您需要提供自己的唯一方法名称。
debugDescription 也保留吗?虽然我认为DebugDescription 应该被 LLDB 之类的调试器使用。
将此添加到您的照片类的@implementation:
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
【讨论】:
【讨论】:
您可以使用两个功能。
- (NSString*)description
这将在您将对象设置为 I.E. 时显示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
避免覆盖描述 - 如果此方法在 调试操作,结果可能无法预料。
【讨论】: