我目前正在尝试在 CLLocationManager
委托(delegate)调用上实现超时功能。
代码如下:
- (void)checkInAt:(UALocation *)location timeout:(NSTimeInterval)timeout {
NSDate *tickDate = [NSDate dateWithTimeIntervalSinceNow:timeout];
self.locationManager = [[CLLocationManager alloc] init];
self.timeout = [[NSTimer alloc] initWithFireDate:tickDate interval:0 target:self selector:@selector(timedOut:) userInfo:nil repeats:NO];
[self.locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
@synchronized (self.timeout) {
// Todo what if the timer fires right now?
// Is it even feasible? On what thread is CLLocationManager operating?
if (self.timeout.isValid) {
[self.timeout invalidate];
}
else {
// Timed out
return;
}
}
[manager stopUpdatingLocation];
// Do the actual check in
}
- (void)timedOut:(NSTimer *)timer {
@synchronized (timer) {
if (!timer.isValid) {
return;
}
}
}
如果您阅读了代码,您可能已经偶然发现了我的问题。
- 是否有更好的方法(= CLLocationManager 中已存在)来实现此类超时?
CLLocationManager
在哪个线程上调用其委托(delegate)的方法?- 如果它不是主线程,我可能会遇到评论突出显示它的问题。我怎样才能避免这种情况?
最佳答案
您可以简单地在方法中添加断点,然后在 xcode 的左侧您将看到哪个线程。
第一个线程是主线程
关于ios - CLLocationManager didUpdateToLocation :, 在哪个线程上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17022607/