Я создал простой UIViewController, который создает и уничтожает GMSMapView.утечка памяти в 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 ;
}
Я использовал инструменты с инструментом Allocations. Тест прост. В UINavigation ViewController нажмите вид, нажмите и повторите. Каждый раз, когда вы нажимаете и выставляете представление, содержащее GMSMapView, существует около 40kb утечек. У меня есть скриншот из инструментов, чтобы проиллюстрировать это, но stackoverflow не позволяет мне публиковать его. Если я заинтересован, я могу отправить кого-то по электронной почте.
Я делаю что-то неправильно или что-то пропускаю?
Зачем вам каждый раз воссоздавать 'GMSMapView'? –
Любые шансы добавить m_mapView.delegate = nil; перед тем как сказать m_mapView = nil решит его? Это может ... –
@SergeyKuryanov В принципе, чтобы освободить память. Каждый GMSMapView потребляет серьезную память. У меня есть мини-просмотр (половина экрана), и кнопка приводит вас к максимальной версии. Когда я вернусь из максимизированной версии, я хочу ее выбросить. – user2101384