1

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

在此处输入图像描述

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

这是 Xcode 4.6.1

4

2 回答 2

4

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

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

于 2013-03-23T01:40:21.880 回答
3

布伦特的回答很好——但我想具体谈谈一个细节。lldb 为许多常见类型(包括NSDate. 如果您p date在调试器控制台中执行此操作,您将获得与在 Locals 窗口中看到的相同的输出。当您右键单击/控制单击变量并执行“打印描述”时,它相当于po date在控制台中编写——正如布伦特所说,它调用了该-description方法。

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

于 2013-03-23T04:06:45.273 回答