Ho creato un semplice UIViewController che crea e distrugge un GMSMapView.perdita di memoria in 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 ;
}
Ho usato gli strumenti con lo strumento Allocations. Il test è facile. In un ViewController di UINavigation, premi la vista, premi indietro e ripeti. C'è una perdita di circa 40kb ogni volta che si spinge e si apre la vista contenente il GMSMapView descritto sopra. Ho uno screenshot degli strumenti per illustrare questo, ma StackOverflow non mi permette di pubblicarlo. Posso inviare a qualcuno per email se interessato.
Sto facendo qualcosa di sbagliato o mi manca qualcosa?
Perché è necessario ogni volta per ricreare 'GMSMapView'? –
Ogni possibilità di aggiungere m_mapView.delegate = nil; prima di dire m_mapView = nil lo risolverà? Potrebbe ... –
@SergeyKuryanov Fondamentalmente per liberare memoria. Ogni GMSMapView consuma memoria seria. Ho una mini-view (metà dello schermo) e un pulsante ti spinge a vedere una versione ingrandita. Quando torno dalla versione ingrandita, voglio buttarlo via. – user2101384