我已经看到过为了调试而提及描述和debugDescription,但是我们已经看到了何时使用哪些以及在什么条件下它们可能产生不同结果的精确解释。
NSObject的文档在debugDescription上也没有任何内容。问题:何时使用哪种,在什么条件下,它们的输出应该/会不同?
答案 0 :(得分:38)
注意:print-object实际上调用指定对象的debugDescription方法。 NSObject通过调用描述方法来实现此方法。因此,默认情况下,对象的调试描述与其描述相同。但是,如果要将这些解耦,可以覆盖debugDescription;很多Cocoa对象都这样做。
如果您已实现debugDescription
,则在GDB中打印对象将显示其结果。知道在UI中使用description
(我知道绑定会这样做),您可能希望使用它来打印一些用户不需要查看的其他信息。
答案 1 :(得分:1)
已经被告知的一个补充。
如果要在lldb中使用po
时改善输出,可以覆盖debugDescription
方法。请记住,打印self(对象本身)将调用描述方法。如果由于某种原因<ClassName: objectAddress>
对您不利,也会覆盖该方法。
所以我的观点是强调打印自我将调用description
方法,而po
调用debugDescription
默认调用描述。通过这种方式,您可以区分出来的结果。