2
Hy,我想获取后台位置更新,因此我编写了下面的代码并使其同步,以确保它不受多线程的影响。所以,我有两个问题:如何在同步中获取位置管理器的共享实例
我真的需要一段代码同步,所有我在做的应用才刚刚运行的后台任务吗?我从来没有创建任何特殊的
NSThread
类型来支持多线程,并且不需要这样做?每当我需要启动位置更新,我把这样的:
CLLocationManager *locationManager = [LocationTracker sharedLocationManager]; locationManager.delegate = self; [locationManager startUpdatingLocation];
是调用正确的方法是什么?
+ (CLLocationManager *)sharedLocationManager { static CLLocationManager *_locationManager; @synchronized(self) { if (_locationManager == nil) { _locationManager = [[CLLocationManager alloc] init]; _locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; [_locationManager requestAlwaysAuthorization]; _locationManager.distanceFilter = 10; if(IS_OS_9_OR_LATER){ _locationManager.allowsBackgroundLocationUpdates = YES; } } } return _locationManager; }
是的,我实现了位置跟踪器内的代表。我有一个疑问是否会绕过初始化代码'dispatch_once(&onceToken,^ {[LocationTracker alloc] init]; [sharedInstance_ initialize]; });'如果我第二次调用[LocationTracker sharedLocationManager]。 – Ketan
dispatch_once块只会执行一次。所以,即使你是多次调用[LocationTracker sharedLocationManager]。初始化只会发生一次 – Subramanian
在同步的情况下将会发生什么? – Ketan