我正在开发一个应用程序,在GMSMapView上显示大约200个GMSMarkers
我尝试了2种方法来显示标记. Method1有点慢,但没有错误发生,但是,Method2在真实设备上运行顺畅但我在iOS模拟器上测试它时得到了GMSThreadException @H_404_3@以下是问题:
1.继续使用method2可以吗?
2.如果不能继续使用方法2,那么减少整个过程的加载时间有什么好的建议吗?
我尝试了2种方法来显示标记. Method1有点慢,但没有错误发生,但是,Method2在真实设备上运行顺畅但我在iOS模拟器上测试它时得到了GMSThreadException @H_404_3@以下是问题:
1.继续使用method2可以吗?
2.如果不能继续使用方法2,那么减少整个过程的加载时间有什么好的建议吗?
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@H_404_3@任何帮助是赞赏Orz @H_404_3@UPDATE1 @H_404_3@正如@ztan在下面回答的那样,我必须在主线程中完成所有这些,有没有比这更好的解决方案?
解决方法
Google Maps iOA SDK要求所有绘图事件都在主线程上完成.
@H_404_3@因此,对于第二种方法,您必须将所有制造商设置代码放在dispatch_get_main_queue()闭包中.
@H_404_3@所以你的方法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 } } } }