Как добавить аннотации в MKMapView асинхронно?

У меня есть много аннотаций, которые нужно добавить в mkmapview. Когда я добавляю аннотации, приложение замерзает в течение короткого периода времени. Я понимаю, что основной поток является единственным потоком, разрешенным для добавления пользовательского интерфейса для просмотра, если это так, как сделать эту операцию, чтобы не заморозить приложение?

// in viewdidLoad for (NSManagedObject *object in requestResults) { CustomAnnotation *customAnnotation = [[CustomAnnotation alloc] init]; customAnnotation.title = object.title; customAnnotation.coordinate = CLLocationCoordinate2DMake([object.latitude doubleValue], [object.longitude doubleValue]); [_mapView addAnnotation:customAnnotation]; } } // end viewdidload - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { // shows the annotation with a custom image MKPinAnnotationView *customPinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"mapAnnotation"]; CustomAnnotation *customAnnotation = (id) annotation; customPinView.image = [UIImage imageNamed:@"green"]; return customPinView; } 

  • Как перейти к ViewController в Xamarin iOS в событии RowSelected
  • Вычислить правое Zoom / Span для наложения MkPolyline
  • Сохранить MKPolyline как NSData в NSUserDefaults
  • Получить текущее местоположение пользователя на MKMapView
  • Проблемы с поиском местоположения пользователя в MKMapView
  • MkMapview setRegion под ios6 привязывается к сетке, например ios5, без точного setRegion
  • MKMapView centerLocation
  • Обнаружение касания на MK ANNOTATION
  • 2 Solutions collect form web for “Как добавить аннотации в MKMapView асинхронно?”

    Вы можете использовать Grand Central Dispatch – GCD для этого.

    Попробуйте:

     - (void)viewDidLoad { dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (NSManagedObject *object in requestResults) { CustomAnnotation *customAnnotation = [[CustomAnnotation alloc] init]; customAnnotation.title = object.title; customAnnotation.coordinate = CLLocationCoordinate2DMake([object.latitude doubleValue], [object.longitude doubleValue]); dispatch_async(dispatch_get_main_queue(), ^{ [_mapView addAnnotation:customAnnotation]; }); } }); } 

    Это хороший учебник: GCD и threading

    Еще лучше и проще, проверьте -[MKMapView addAnnotations:] для массового добавления без затрат на пересчет каждой отдельной аннотации.

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.