Có hai cách lưu trữ NSDate trong NSUserDefaults mà tôi đã gặp.
Tùy chọn 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Tùy chọn 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];
Ưu và nhược điểm
lựa chọn 1
Điều này có vẻ là nhỏ gọn và hợp lý. Tuy nhiên, tôi đã lo lắng về việc này sẽ xảy ra do lỗi Date Formatter .
Lựa chọn 2
Điều này có vẻ là vụng về. Tôi cũng không chắc về độ chính xác của nó - trong một thử nghiệm tôi đã thực hiện, khi tôi lấy lại ngày trở lại sau 48 giây, mặc dù Apple Docs nói rằng NSTimeInterval có "độ chính xác thứ hai".
Yêu cầu
Dù tôi chọn phương pháp nào thì cũng phải:
Chính xác trong vòng một giây.
Dễ đọc và đáng tin cậy
Câu hỏi của tôi
Là sự không chính xác với Tùy chọn 2 vì tôi đang làm gì đó sai?
Mà trong số hai tùy chọn bạn sẽ sử dụng?
Có lựa chọn nào khác mà tôi không biết?
Cảm ơn!