/ diddpdateLocations的频率:如果在init中调用startUpdatingLocation,则调用具有不同的行为

时间:2014-01-16 18:28:22

标签: ios ios7 core-location cllocationmanager

我注意到位置行为存在巨大的差异,这取决于何时调用startUpdatingLocation: - 特别是如果在类的init属性中调用它,则会对didUpdateLocations进行几次立即初始调用,而不是更多,而如果在其他地方调用startUpdatingLocation,则会对didUpdateLocations进行多次调用。

以下是init案例的示例代码:

- (id) init 
{
    ….
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = kCLHeadingFilterNone;
    self.locationManager.pausesLocationUpdatesAutomatically = NO;
    [self.locationManager startUpdatingLocation];
}

当我执行此代码时,我的应用程序会收到几次对didUpdateLocations的调用:然后再没有得到任何更多(测试我来回行走约100米)。

但是,如果我改为执行此代码:

- (id) init 
{
    ….
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = kCLHeadingFilterNone;
    self.locationManager.pausesLocationUpdatesAutomatically = NO;
    //[self.locationManager startUpdatingLocation];
}

- (void) someExternalTrigger
{
    [self.locationManager startUpdatingLocation];
}

然后didUpdateLocations:即使设备静止也会被调用几十次,并且当我走几米时它会继续被多次调用。 这与在init中调用startUpdatingLocation:完全相反,人们会认为它应该是相同的行为。

是否有人对我观察此事的原因有任何解释或猜测?

修改 我还试验了更改init以实现此目的:

[self   [self performSelector:@selector(doStartLocationManager) withObject:nil afterDelay:2.0];

然后我开始获得多个持续更新。

0 个答案:

没有答案