我注意到位置行为存在巨大的差异,这取决于何时调用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];
然后我开始获得多个持续更新。