是否有一种方法可以在我的自定义类中覆盖,以便
时 NSLog(@"%@", myObject)
调用,它会打印我的对象的字段(或者我认为重要的任何字段)?我想我正在寻找与Java toString()
相同的Objective-C。
答案 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)
答案 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
避免覆盖说明-如果此方法在 调试操作,结果可能无法预测。