如何避免多次调用同一个函数?

Posted

技术标签:

【中文标题】如何避免多次调用同一个函数?【英文标题】:How to avoid the calling of same function multiple times? 【发布时间】:2012-06-15 11:52:29 【问题描述】:

我在我的应用程序中使用核心位置框架。当应用程序第一次启动时,didUpdateToLocation 方法被调用了两次。我分配了位置管理器实例并启动它并调用了 startUpdatingLocation。在 didUpdateToLocation 中,我正在调用另一个函数,在该函数中我将当前的纬度和经度发送到服务器,那么如何避免多次调用该函数?

- (void)viewDidLoad

[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
[self.mapView setShowsUserLocation:YES];
if( [CLLocationManager locationServicesEnabled])

    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.delegate = self;
    [locationManager startUpdatingLocation];
    locationManager.distanceFilter = 1000.0f;

else

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"GPS Disabled"          message:@"Enable GPS settings to allow the application to search for your current location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
    [alertView release];



  //Here is didUpdateToLocation method

 -(void)locationManager:(CLLocationManager *)manager
 didUpdateToLocation:(CLLocation *)newLocation
      fromLocation:(CLLocation *)oldLocation
   
  self.lat = newLocation.coordinate.latitude;
  self.longi = newLocation.coordinate.longitude;

    NSLog(@"Updated Location : lat--%f long--%f",self.lat,self.longi);
   [self updateUserLocation];



  

  //in this function i am sending the latitude and longitude to server.
 -(void)updateUserLocation
 

   NSString *urlString = [[NSString stringWithFormat:@"http://appifylabs.com/tracemybuddies/index.php/iphone/updateUserLocation/?userId=1&latitude=%@&longitude=%@",self.lat,self.longi] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

[conn url_Connection:urlString withActivityView:self.activityView     withParentView:self.view];
  

【问题讨论】:

在更新方法中获得位置后,调用 stopUpdating 方法,停止更新.. 把你的代码放在这里你在做什么..它会让你理解清楚.. 我不能这样做,因为我需要在我的应用程序中更新当前位置,并且每次当当前位置得到更新时,我都会将更新后的纬度和经度发送到服务器。此函数仅在应用程序第一次启动时调用两次,否则 didUpdateToLocation 方法仅在当前位置更新时调用一次。 【参考方案1】:

在 didUpdateToLocation 内部,当 oldLocation 被接收为 NULL 时,从函数返回。 第一次调用您的委托时,它将为 NULL。

其次,可以取currentTime和newLocation.timeStamp的时间戳差。如果不在可接受的范围内,则从函数中返回。

【讨论】:

谢谢,我正在检查 didUpdateToLocation 方法,如果 oldLocation 等于 NULL 然后从函数返回。它解决了我的问题。【参考方案2】:

也许您应该仅在某个时间间隔已过时才调用您的服务器?

int now = (int)[[NSDate date] timeIntervalSince1970];

if(now - self.lastUpdate > INTERVAL_BETWEEN_TWO_UPDATES)   
    [self callServeur];
    self.lastUpdate = now;

【讨论】:

以上是关于如何避免多次调用同一个函数?的主要内容,如果未能解决你的问题,请参考以下文章

避免在 UPDATE 语句中多次调用标量函数

PHP 小技巧之如何避免参数多次传递?

C++并发,同步设计,避免多次执行问题

如何避免从 Bash 脚本中多次调用 Python 解释器?

如何避免从 Bash 脚本中多次调用 Python 解释器?

避免在不同实​​例中多次执行一个函数