我不明白文档中的这个示例:timeIntervalSinceNow
方法应该显示正值,但我们如何才能达到代码中提到的“5”? (我认为它或者更多或更少,或者-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;
感谢您的帮助
答案 0 :(得分:9)
如果timeIntervalSinceNow
调用的结果是否定的(意味着时间戳是过去的(在这种情况下,它始终是),则它将被转换为正数。例如-2.5
将成为+2.5
(反之亦然)。
然后测试反转符号值,看它是否大于5.0 - 在这种情况下,这意味着时间戳是超过五秒前。如果是,则不对位置数据执行任何操作,因为它太旧而无法使用。
就我个人而言,如果没有符号反转,我会在测试中使用负数来写这个:
if( [[newLocation timestamp] timeIntervalSinceNow] < -5.0 ) return;
答案 1 :(得分:3)
这就是NSDate文档对timeIntervalSinceNow所说的内容:
接收器与当前日期和时间之间的间隔。如果接收者早于当前日期和时间,则返回值为负。
在这种情况下,时间戳记录在过去,它将始终早于“现在”。另一方面,如果你使用timeIntervalSince1970,结果将是正数。