NSDate的LLDB显示是否不一致?

时间:2013-03-23 00:57:09

标签: xcode nsdate lldb

我对以下红色下划线的差异感到困惑:

enter image description here

为什么这个NSDate对象在调试窗格中的BST中显示,但在LLDB终端的GMT中被要求“打印”日期“的描述”?

这是使用Xcode 4.6.1

2 个答案:

答案 0 :(得分:4)

NSDate代表一个特定的时刻,不考虑人类称那个时刻。如果您查看NSDate,您会注意到甚至没有hourminutesecond属性,更不用说{{1}属性。时区是用于解释timeZone以显示的NSCalendar的一项功能。 (您可能更熟悉NSDate;它在内部使用NSDateFormatter来解释日期。)

在这种情况下,Xcode恰好配置变量面板的日历与LLDB配置调试控制台的日历略有不同。我不得不猜测调试控制台正在调用NSCalendar,它总是使用UTC,而变量面板正在使用一个尊重当前时区的日期格式化程序。 (你的Mac配置为使用BST,对吗?如果没有,那是一个奇怪的选择...)

答案 1 :(得分:3)

布伦特的答复很好 - 但我想特别提到一个细节。 lldb内置了许多常见类型的格式化程序,包括NSDate。如果在调试器控制台中执行了p date,则会获得与“局部”窗口中相同的输出。当您右键单击/控制单击变量并执行“打印说明”时,它等同于在控制台中编写po date - 正如Brent所说,它调用-description方法。

这不是控制台vrs。本地窗口差异,或Xcode vrs。 lldb差异。一种访问方法是使用lldb的内置数据格式化程序,一种是调用-description