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