CLLocation,获得新的位置

时间:2011-06-02 03:49:46

标签: iphone nsdate cllocationmanager

在更多iPhone编程书中,作者做了:

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
        if ([newLocation.timestamp timeIntervalSince1970] < [NSDate timeIntervalSinceReferenceDate] - 60)
        locationCoordinate = newLocation.coordinate;
return;
    ...

确保数据是在最后一分钟拍摄的。两个问题:

1)if语句在做什么。看起来在左侧,您将获得此方法触发与1970年日期之间的时间差。然后在右侧,您可以获得2001日期和现在减去60秒之间的秒数差异。所以对我来说,if语句永远不会有效,因为左边的数据总是会有更多的秒数。或者我理解错了吗?

2)void函数的返回有什么作用?这被认为是好的编码吗? THX。

2 个答案:

答案 0 :(得分:0)

if块的

timeIntervalSinceReferenceDate返回的值可能为负数。见说明。

  

如果接收器早于   参考日期,该值为负。

因此,如果条件可能是假的。

返回声明。

如果您希望函数在某个条件上到达函数闭括号之前将控件返回到调用函数。见例如

-(void) SomeFunction
{

   if(Condition1)
   { 
      return;
   }

}

答案 1 :(得分:0)

我不知道这里发生了什么,它令人困惑的声明,我使用过类似的东西

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
        NSDate* eventDate = newLocation.timestamp;
        NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
        if( abs(howRecent) > 1.0 )
               return;
        ////process your event here
}

将void放入void方法是正确的,因为我不想在某些条件下执行下一个语句。相同的代码可以写成

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
        NSDate* eventDate = newLocation.timestamp;
        NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
        if( abs(howRecent) < 1.0 ){
                 ///process your event
               }
}

这取决于你的需要。