NSDate作为NSDictionary的键

Raj*_*dal 4 cocoa cocoa-touch nsdictionary nsdate core-foundation

是否可以在NSDictionary中添加NSDate作为键和一些数组?

我没有任何要求将字典写入磁盘 - 归档或取消归档,就像这个人需要它一样:NSDictionary使用NSDates作为密钥

但是,为什么我希望将NSDate作为键特别添加,以便我可以从字典中获取所有键并进行一些计算,例如从一个范围内获取日期.

具有相同日期值的两个对象在创建时是否共享相同的内存?

是否可以将NSDate作为关键?此外,我可能会面临这个假设的其他问题?

谢谢,

拉吉

编辑: 发布我的问题后,我刚刚写了一个示例代码:

NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateComps setDay:1];
[dateComps setMonth:1];
[dateComps setYear:2012];
NSDate *date1 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSDate *date2 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSLog(@"Date 1 = %x, Date 2 = %x", date1, date2);
Run Code Online (Sandbox Code Playgroud)

输出:

Date 1 = 7945610, Date 2 = bd03610
Run Code Online (Sandbox Code Playgroud)

但是,NSDictionary的关键比较是否将这两个NSDate对象解释为不同?

另一个编辑:

另外,如果我应该使用NSDateFormatter将NSDate转换为NSString,我无法直接检查范围内的日期.我将不得不执行以下步骤:

  1. 从字典中获取所有NSString键
  2. 将它们转换回NSDate数组
  3. 执行谓词并获取范围内的日期
  4. 再次将这些日期转换回字符串数组
  5. 现在使用此字符串键从字典中获取值!

那么,还有更好的方法吗?

CRD*_*CRD 7

是的,NSDate对象可以用作键NSDictionary- 只要它支持NSCopying协议,任何对象类型都可以用作键.键使用isEqual:不是使用指针值进行比较.有关NSDictionary更多详细信息,请参阅文档的"概述"部分.