Przeczytałem inne pytania i odpowiedzi związane z StackOverflow i rozumiem, że jest to błąd, ponieważ iOS6 (lub przez projekt, musiał zwolnić delegata, a następnie wyświetlić, kto wie). Nie wiem, dlaczego i jak nie zostało to naprawione.Wyciek pamięci w MapKit iOS8
Anywho, dodałem poprawek od innych odpowiedzi (poniżej, dla przyszłych czytelników):
- (void) viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[self applyMapViewMemoryHotFixOnDisappear];
}
- (void)applyMapViewMemoryHotFixOnDisappear{
[self applyMapViewMemoryHotFix];
self.mapView.showsUserLocation = NO;
self.mapView.delegate = nil;
self.locationManager.delegate = nil;
[self.mapView removeFromSuperview];
self.mapView = nil;
}
- (void)applyMapViewMemoryHotFix{
switch (self.mapView.mapType) {
case MKMapTypeHybrid:
{
self.mapView.mapType = MKMapTypeStandard;
}
break;
case MKMapTypeStandard:
{
self.mapView.mapType = MKMapTypeHybrid;
}
break;
default:
break;
}
self.mapView.mapType = MKMapTypeStandard;
}
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
[self applyMapViewMemoryHotFix];
}
Jednak mam pytanie jest, dlaczego pamięć nie spadnie do poziomu przed MapKit ?
Czy jest coś jeszcze mi brakuje? Czy to oczekiwane zachowanie? Nie ma wycieków pamięci ocenianych przez profilera, ale oczywiście coś jest nie w porządku ...
widzę to samo. Znalazłeś jakieś rozwiązanie? – thejaz
Nie!Szczerze mówiąc, nie stosuj nawet "poprawki" w zmienionym regionie. "Wyciek pamięci" (jeśli nawet taki jest) jest w porządku i nie jest zauważalny na prawdziwym urządzeniu, a nie rośnie, co jest miłe. – SparkyRobinson
Zgadzam się, zauważyłem, że było znacznie lepiej na urządzeniu niż na symulatorze. – thejaz