Hy, ich möchte die Hintergrund-Location-Updates, also schrieb ich den untenstehenden Code und machen es synchronisiert, um es vor Multithreading zu schützen. So habe ich zwei Fragen:Wie bekomme ich eine gemeinsame Instanz von Location Manager in synchronisieren
Benötige ich wirklich das Stück Code zu synchronisieren, alles, was ich in App tue, ist nur Hintergrund-Task ausgeführt wird? Ich habe nie einen speziellen
NSThread
Typ erstellt, um Multithreading zu unterstützen und nicht als solches zu benötigen?Jedes Mal, wenn ich brauche, um die Standortaktualisierungen zu starten, ich so nennen:
CLLocationManager *locationManager = [LocationTracker sharedLocationManager]; locationManager.delegate = self; [locationManager startUpdatingLocation];
richtige Weg ist, zu nennen?
+ (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; }
ja, ich habe die Delegierten in Location Tracker implementiert. Ich habe noch einen Zweifel wird es umgehen den Initialisierungscode 'dispatch_once (& onceToken,^{ sharedInstance_ = [[LocationTracker Alloc] init]; [sharedInstance_ initialize]; });' wenn ich [LocationTracker sharedLocationManager] das zweite Mal anrufe. – Ketan
dispatch_once Block wird nur einmal ausgeführt. So rufen Sie selbst mehrere Zeitpunkte von [LocationTracker sharedLocationManager] an. Initialisierung wird nur einmal passieren – Subramanian
was wird im Falle von synchronisiert werden? – Ketan