CLLocation, получение новых локаций - PullRequest
0 голосов
/ 02 июня 2011

В книге «Больше о программировании 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 голосов
/ 02 июня 2011

Я не знаю, что здесь происходит, это запутанное утверждение, я использовал что-то вроде этого

    - (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
}

Правильно помещать return в метод void, так как я не хочу выполнять оператор next для некоторых условий .. тот же код может быть записан как

    - (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
               }
}

это зависит только от вашей потребности.

0 голосов
/ 02 июня 2011

для блока if:

значение, возвращаемое timeIntervalSinceReferenceDate, может быть отрицательным. см. описание.

Если получатель раньше, чем базовая дата, значение отрицательное.

Так что, если условие может быть ложным.

Для оператора возврата.

если вы хотите, чтобы ваша функция возвращала управление вызывающей функции до достижения закрытой скобки функции при некотором условии . См. Например.

-(void) SomeFunction
{

   if(Condition1)
   { 
      return;
   }

}
...