我遇到过两种在 NSUserDefaults 中存储 NSDate 的方法。
选项 1 - setObject:forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
选项 2 - timeIntervalSince1970
// Set
NSDate *myDate = [NSDate date];
NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"];
// Get
NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"];
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];
优点和缺点
选项1
这似乎是紧凑和合乎逻辑的。但是,由于Date Formatter 错误,我担心这会出错。
选项 2
这似乎很笨拙。我也不确定它的准确性——在我做的一项测试中,当我检索到日期时,它已经过了 48 秒,尽管 Apple Docs 说 NSTimeInterval 具有“亚秒级精度”。
要求
无论我选择什么方法,它必须是:
精确到一秒钟之内。
可读且可靠。
我的问题
选项 2 不准确是因为我做错了什么吗?
您会使用这两个选项中的哪一个?
还有其他我不知道的选择吗?
谢谢!