Stworzyłem prosty UIViewController, który tworzy i niszczy GMSMapView.wyciek pamięci w GMSMapView
- (void)viewDidAppear:(BOOL)animated
{
if (!m_disappearing_bc_segue)
{
[super viewDidAppear:animated] ;
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude: self.location.latitude
longitude: self.location.longitude
zoom:9 ] ;
m_mapView = [GMSMapView mapWithFrame:CGRectMake(0, 0, 320, 420) camera:camera];
m_mapView.myLocationEnabled = NO ;
[m_mapView setMapType: kGMSTypeTerrain] ;
m_mapView.delegate = self ;
[self.view addSubview:m_mapView] ;
[self.view sendSubviewToBack:m_mapView] ;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated] ;
[m_mapView clear] ;
[m_mapView stopRendering] ;
[m_mapView removeFromSuperview] ;
m_mapView = nil ;
}
Użyłem instrumentów z instrumentem alokacji. Test jest łatwy. W UINavigation ViewController naciśnij widok, naciśnij i powtórz. Występuje około 40kb przecieku za każdym razem, gdy naciskasz i otwierasz widok zawierający opisany wyżej GMSMapView. Mam zrzut ekranu z Instrumentów, aby to zilustrować, ale stackoverflow nie pozwala mi go opublikować. Mogę wysłać do kogoś przez e-mail, jeśli jest zainteresowany.
Czy robię coś złego lub czegoś brakuje?
Dlaczego za każdym razem potrzebujesz odtwarzać 'GMSMapView'? –
Dowolna szansa dodania m_mapView.delegate = nil; przed powiedzeniem m_mapView = nil go rozwiąże? Może ... –
@SergeyKuryanov Zasadniczo, aby zwolnić pamięć. Każdy GMSMapView zużywa poważną pamięć. Mam mini-widok (połowę ekranu), a przycisk wyświetla widok zmaksymalizowanej wersji. Kiedy wracam z wersji zmaksymalizowanej, chcę ją wyrzucić. – user2101384