Вычисление timeIntervalSinceNow с отрицательным значением (пример CLLocation)?
Я не понимаю этот пример из документа: timeIntervalSinceNow
Метод должен показывать положительное значение, но как мы можем достичь "5", как указано в коде? (я думаю, что это либо 0 больше или меньше, либо -10, -20, -30 и т. д.... но как мы можем получить положительное значение, например 5?):
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// test the age of the location measurement to determine if the measurement is cached
// in most cases you will not want to rely on cached measurements
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > 5.0) return;
Спасибо за вашу помощь
2 ответа
Если результат timeIntervalSinceNow
Вызов отрицательный (это означает, что отметка времени в прошлом (что, в данном случае, всегда будет)), она будет преобразована в положительное число. -2.5
станет +2.5
например (и наоборот).
Затем вы проверяете значение перевернутого знака, чтобы увидеть, не превышает ли оно 5,0 - в этом случае это означает, что отметка времени была более пяти секунд назад. Если это так, вы ничего не делаете с данными о местоположении, потому что они слишком стары, чтобы быть полезными.
Лично я написал бы это без инверсии знака, используя отрицательное число в тесте:
if( [[newLocation timestamp] timeIntervalSinceNow] < -5.0 ) return;
Вот что документация NSDate должна сказать о timeIntervalSinceNow:
Интервал между получателем и текущей датой и временем. Если получатель раньше текущей даты и времени, возвращаемое значение является отрицательным.
В этом случае отметка времени была записана в прошлом, и она всегда будет раньше, чем "сейчас". Если, с другой стороны, вы используете timeIntervalSince1970, результат будет положительным.