Вы можете загружать аннотации в фоновом режиме, но вы всегда должны добавлять их в основной поток.
Вот почему
mapView:didAddAnnotationViews:
вызывается, но не распространяется на пользовательский интерфейс. Это было бы то же самое, что вызов метода UITableViewDelegate в фоновом режиме.
Вы можете попробовать следующий шаблон проектирования с использованием GCD
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
//Load the annotations on the background queue;
dispatch_async(dispatch_get_main_queue(), ^{
//add the annotations to the mapView;
});
});