Будут ли два [дата NSDate], следующие друг за другом, всегда возвращаться разное время? - PullRequest
3 голосов
/ 22 октября 2011

Будут ли даты и даты всегда разными?

// Two [NSDate date] following each other
NSDate *dateA = [NSDate date];    // Line X
NSDate *dateB = [NSDate date];    // Line X+1

То есть будет ли строка ниже всегда возвращать НЕТ?

[dateA isEqualToDate:dateB]

(«Всегда» означает «очень быстро»).процессор не будет выполнять две команды так быстро, что dateA и dateB будут назначаться одновременно с точностью до «секунды».

Я хочу иметь «уникальную» метку времени для некоторой внутренней идентификации (неDB-родственный).

Ответы [ 4 ]

4 голосов
/ 22 октября 2011

Нет никаких обещаний, что dateB будет после dateA.NSDate основано на системных часах, которые могут подниматься вперед или назад на основе информации NTP.Было бы довольно удивительно, если бы два NSDate раза столкнулись, но нет никаких обещаний, что этого не произойдет.

Если вам нужно что-то немного лучше, я бы порекомендовал mach_absolute_time() или CACurrentMediaTime().Они всегда увеличиваются во время выполнения вашей программы.Они измеряют время с момента последней загрузки устройства, поэтому они уникальны только до следующей перезагрузки.Если вам нужно что-то, что всегда увеличивается, это довольно легко построить, отслеживая смещение.mach_absolute_time() отслеживает тики процессора, поэтому я не верю, что два вызова к нему в одном потоке могут возвращать одно и то же значение.

2 голосов
/ 22 октября 2011

Нет гарантии, что они могут быть одинаковыми, хотя они могут зависеть от времени.Состояние документов, возвращаемое текущее время.Это может измениться между выполнением этих двух строк, или может остаться прежним, если это произойдет достаточно быстро.

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html#//apple_ref/doc/uid/20000188-date

Если вам нужны уникальные значения, тогда вам стоит взглянуть на генерацию GUID.Оформить заказ:

http://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFUUIDRef/Reference/reference.html

0 голосов
/ 22 октября 2011

NSDate имеет точность до миллисекунды, поэтому трудно представить сценарий, в котором вы бы получили одинаковые временные метки. Ожидается, что более быстрое оборудование в будущем также обеспечит точность синхронизации, которая зависит от повышения производительности.

Простой пример кода - просто получите серию NSDates без какого-либо промежуточного кода. Бьюсь об заклад, они значительно отличаются от последнего десятичного знака, что будет означать, что вы будете в порядке.

0 голосов
/ 22 октября 2011

Технически говоря, да. Вызовы NSDate происходят последовательно, а не одновременно, поэтому между вызовами будет некоторая разница во времени. Но если вы ищете уникальные временные метки, тогда все в порядке.

...