gpt4 book ai didi

google-maps-sdk-ios - GMSMapView 中的内存泄漏

转载 作者:行者123 更新时间:2023-12-04 15:45:44 30 4
gpt4 key购买 nike

我创建了一个简单的 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 ;
}

我已经将 Instruments 与 Allocations 工具一起使用。测试很容易。在 UINavigation ViewController 中,推 View ,回击并重复。每次推送和弹出包含上述 GMSMapView 的 View 时,都会有大约 40kb 的泄漏。我有一个来自 Instruments 的屏幕截图来说明这一点,但是 stackoverflow 不允许我发布它。如果有兴趣,我可以通过电子邮件发送给某人。

我做错了什么或错过了什么?

最佳答案

对我有用的是删除 @try我在 dealloc 中的条款:

@try {
[self.mapView removeObserver:self forKeyPath:@"myLocation"];
}
@catch (NSException *exception) {
}

我的意图是删除 self当 ViewController 被解除分配时作为观察者(具有讽刺意味的是为了避免内存问题),如果它不是观察者,则忽略异常。

显然 @try以某种方式保留了 mapView,这使它保留在内存中(通过 ARC)。在这里查看原因: Why does "try catch" in Objective-C cause memory leak? .

删除后 @try子句(并使用一些标志来调节 removeObserver 以避免异常),内存恢复正常运行!

关于google-maps-sdk-ios - GMSMapView 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443859/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com