ios - 地图视图的内存没能正常释放的问题
ringa_lee
ringa_lee 2017-04-17 16:01:41
[iOS讨论组]

我有一个地图控制器,然后把它放到导航控制器里,在放到tabbar 控制器

    MapViewController *mapVC = [[MapViewController alloc]init];
    mapVC.tabBarItem.title = @"地图";
    imgePath  =[[NSBundle mainBundle] pathForResource:@"地图30×30px" ofType:@"png"];
    img =[[UIImage imageWithContentsOfFile:imgePath]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] ;
    mapVC.tabBarItem.image = img;
    imgePath  =[[NSBundle mainBundle] pathForResource:@"地图30×30点击效果" ofType:@"png"];
    img =[[UIImage imageWithContentsOfFile:imgePath]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] ;
    mapVC.tabBarItem.selectedImage = img;
    UINavigationController *mapNavC = [[UINavigationController alloc]initWithRootViewController:mapVC];
    
    //tbc是tabbar controller
     [tbc setViewControllers:@[mainNavC,mapNavC,msgNavC,memNavC]];

当我点击地图对应的tabbar,进入地图视图,然后再点击别的tabbar,进入别的视图,通过instrument发现之前增加的内存并没有释放掉,请问是什么原因,我在别的地方也有地图视图,是通过导航控制器push的,pop之后那些内存是能正常释放的。
后来我在地图视图的viewwilldisappear里显式地把地图设为nil好像也不行。

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.navigationController.navigationBarHidden = NO;
    [Util showAlertView:@"disappear"];
    if (self.mapV) {
        [self.mapV removeFromSuperview];
        self.mapV = nil;
    }
    
}

打开地图之前的内存情况

打开地图之后的内存情况

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
迷茫

你用的tabbarcontroller内存这么多很正常,切换的时候不会调dealloc的,只能在mainNavC,mapNavC,msgNavC,memNavC的viewwilldisappear里去控制资源,你在现在有内存泄漏,解决一下泄露的问题吧。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号