GMSMapViewを作成して破棄する単純なUIViewControllerを作成しました。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機器でInstrumentsを使用しました。テストは簡単です。 UINavigation ViewControllerで、ビューを押して戻り、繰り返します。上記のGMSMapViewを含むビューをプッシュしてポップするたびに、約40kbのリークが発生します。私はこれを説明するためにインストゥルメンツからのスクリーンショットを持っていますが、stackoverflowはそれを投稿することを許可しません。興味があればメールで誰かに送ることができます。
私は何か間違っているか何かを逃していますか?私の意図は、(皮肉にもメモリの問題を回避するため)のViewControllerがdealloc'dされたときにオブザーバーとしてself
を削除することでした、と
@try {
[self.mapView removeObserver:self forKeyPath:@"myLocation"];
}
@catch (NSException *exception) {
}
:どのような私のために働いていた私はdealloc
に持っていた@try
句を削除した
いつも 'GMSMapView'を再作成する必要がありますか? –
m_mapView.delegate = nilを追加する可能性があります。前にm_mapView = nilと言って解決しますか?それは... –
@ SergeyKuryanov基本的にメモリを解放します。各GMSMapViewは重大なメモリを消費します。私はミニビュー(画面の半分)を持っていて、ボタンを押すと最大化されたバージョンが表示されます。私が最大化されたバージョンから戻るとき、私はそれを放棄したい。 – user2101384