I'm developing an app to display about 200 GMSMarkers on GMSMapView I tried 2 methods to display the markers. Method1 is a bit slow but no error occur, however, Method2 runs smoothly on a real device but I got GMSThreadException when I test it on iOS Simulator
Here are the questions: 1. Is it ok to keep using method2? 2. If it is not ok to keep using method2, any good suggestions to reduce the loading time for the whole process?
func Method1() {
for location in locationsArrayFromSomeWhere {
let placeMarker = PlaceMarker(coordinate: location.coordinate)
.
.//Simple Setup
.
placeMarker.map = self.mapView
}
}
func Method2() {
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) {
for location in locationsArrayFromSomeWhere {
let placeMarker = PlaceMarker(coordinate: location.coordinate)
.
.//Simple Setup
.
dispatch_async(dispatch_get_main_queue()) {
placeMarker.map = self.mapView
}
}
}
}
enter code here
Any help is appreciated Orz
As @ztan answered below, I have to do all this in the main thread, is there any better solution than this?
Google Maps iOA SDK requires that all drawing events be done on the main thread.
So, for your second method, you have to do put all your maker setup code inside the dispatch_get_main_queue()
closure.
So your method 2 will be:
func Method2() {
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) {
for location in locationsArrayFromSomeWhere {
dispatch_async(dispatch_get_main_queue()) {
let placeMarker = PlaceMarker(coordinate: location.coordinate)
.
.//Simple Setup
.
placeMarker.map = self.mapView
}
}
}
}
Swift 3.0
dispatch_async(dispatch_get_main_queue())
has been renamed to
DispatchQueue.main.async
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With