Mam problem z wydajnością związany z dodawaniem adnotacji do map w systemie iOS (przy użyciu standardowych metod mapowania - stąd używanie map Apple). Próbuję dodać dużą liczbę adnotacji (10000+) luzem, używając metody (void)addAnnotations:(NSArray *)annotations
. Obiekty adnotacji to nic specjalnego - bardzo podstawowe klasy, która implementuje MKAnnotation
tylko konstruktora zdefiniowane następująco:Dodawanie adnotacji do mapy jest zbyt wolne - iOS
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {
if(self = [super init]) {
title = ttl;
coordinate = c2d;
}
return self;
}
W celu sprawdzenia, jakie stworzył podstawową aplikację, która po prostu dodaje adnotacje do podstawowego mapie widok na obciążenie i zajmuje około 6-7 sekund na iPadzie 2. Bardzo akceptowalna wydajność. Jednak rzeczy komplikują się, gdy umieszczam ten sam podstawowy widok mapy w mojej własnej aplikacji. Jest to dokładnie ta sama logika, ale kiedy robię to w mojej aplikacji, ładowanie wszystkich adnotacji zajmuje około 50 sekund.
Moja aplikacja ma wiele widoków w sobie. Aby dokładnie zidentyfikować problem, zacząłem umieszczać widok mapy od najniższego poziomu, aż osiągnę najwyższy poziom. Zrobiłem profilowanie na każdym kroku, aby sprawdzić, czy to pomaga w osiągach, ale nie widzę żadnych wyników - nadal trwa to około 50 sekund. Obecnie moja aplikacja po prostu ładuje i dodaje adnotacje do najwyższego i jedynego widoku mapy poziomu, idealnie takiego samego jak aplikacja autonomiczna, ale z dowolnego powodu nadal widzę renderowanie adnotacji trwające około 50 sekund. Jedyne rozsądne wyjaśnienie, jakie mam, dotyczy niektórych ustawień aplikacji, które mam w jakiś sposób kolidują z wydajnością mapy. Zrobiłem kilka lektur, żeby wymyślić rozwiązanie bezskuteczne.
Ktoś ma jakieś pomysły na temat tego, co może być tutaj problemem? Dzięki!
Świetne pytanie i głębokość/szczegóły. Niestety nie znam odpowiedzi, ale dla pierwszego pytania na temat StackOverflow muszę cię oklaskiwać! – MCKapur
Nie grałem dużo MapKit, ale tutaj są 2 możliwe opcje: 1) Spróbuj zrobić to w wątku bg (nie jestem pewien, czy to zadziała). 2) Ładuj tylko adnotacje, które będą miały sens w zdefiniowanym powiększeniu. Więc jeśli yo jest bardzo pomniejszony, tylko jeden może pokazać 20, a po powiększeniu liczba możliwych adnotacji będzie mniejsza niż 10k, więc pokaż następne 20 ważniejszych, które przecinają bieżącą rzutnię ... i tak dalej. – LocoMike