在iOS模拟器上显示GMSMarkers时发生GMSThreadException

我正在开发一个应用程序,以在GMSMapView上显示大约200个GMSMarkers我尝试了2种方法来显示标记。 Method1有点慢,但没有发生错误,但是,Method2在真实设备上运行平稳,但我得到了GMSThreadException,当我在iOS模拟器上testing它

下面是问题:1.继续使用method2可以吗? 2.如果继续使用method2是不好的,那么有什么好的build议可以减less整个过程的加载时间?

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 

任何帮助表示赞赏奥兹

UPDATE1

正如@ztan在下面回答的,我必须在主线程中做所有这些,有没有比这更好的解决scheme?

Google Maps iOA SDK要求所有绘图事件都在主线程上完成。

因此,对于第二种方法,必须将所有的制造商设置代码放入dispatch_get_main_queue()闭包中。

所以你的方法2将是:

 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()) 

已经改名为

 DispatchQueue.main.async