有没有一个方法,我可以重写在我的自定义类,以便当
NSLog(@"%@", myObject)
被调用,它将打印我的对象的字段(或任何我认为重要的) ?我想我要寻找的是与 Java 的 toString()等价的 Objective-C。
toString()
您可以覆盖 NSObject 的 description 方法:
- (NSString *)description
关于日志记录,我推荐使用这个 博客文章在 Objective-C 中进行更好的日志记录。
它是 description实例方法,声明为:
description
下面是一个实现示例(感谢 grahamparks) :
- (NSString *)description { return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author]; }
把这个添加到照片类的 @implementation:
@implementation
- (NSString *)description { return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author]; }
您可以使用两个函数。
- (NSString*)description
当你把你的对象作为,例如 NSLog的一个参数时,它就会显示出来。另一个描述函数是:
NSLog
- (NSString*)debugDescription
在调试命令窗口中执行 po anInstanceOfYourClass时将调用此函数。如果您的类没有 debugDescription函数,那么只调用 description。
po anInstanceOfYourClass
debugDescription
请注意,基类 NSObject确实实现了 description,但它相当简单: 它只显示对象的地址。这就是为什么我建议您在任何您想要获得信息的类中实现 description,特别是如果您在代码中使用 description方法的话。如果您在代码中使用 description,我建议您也实现 debugDescription,这也使得 debugDescription更加冗长。
NSObject
这将输出现有的声音:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
我认为应该强调@Nuthatch 关于用 CoreData (即继承 NSManagedObject 的类)覆盖“ description”的评论
Https://developer.apple.com/documentation/coredata/nsmanagedobject?language=objc
避免重写描述ーー如果此方法在 调试操作时,结果可能无法预测。