Каждый раз, когда вы звоните Date()
, система извлекает время из часов реального времени.Если между этим вызовом и предыдущим вызовом прошло какое-то измеримое время, даты будут другими.Date
объекты используют внутреннее количество секунд Double
, которое имеет точность ≈15 десятичных цифр, поэтому они могут измерять крошечные, крошечные промежутки времени (менее пикосекунды). Я не знаю точностичасов реального времени на iOS, но, скорее всего, они будут в наносекундах.
Попробуйте запустить этот код в режиме выпуска на целевом устройстве:
let arraySize = 1000
var array = [Date]()
var differences = 0
array.reserveCapacity(arraySize)
for _ in 1...arraySize {
array.append(Date())
}
for index in 0 ..< arraySize-1 {
if array[index] != array[index+1] {
differences += 1
let difference = array[index+1].timeIntervalSinceReferenceDate -
array[index].timeIntervalSinceReferenceDate
print("Dates at index \(index) are different! by \(difference)")
}
}
if differences == 0 {
print("All dates are equal")
} else {
print("\(differences) dates were different out of \(arraySize)")
}
Я запустил его как командную строкуинструмент на моем Mac и обнаружил, что я всегда получал по крайней мере пару дат, которые были разными.(Mac работают намного быстрее, чем устройства iOS)
Современные устройства iOS являются многоядерными устройствами, управляемыми прерываниями, поэтому результаты будут варьироваться от запуска к запуску.