IOS系列——页面释放不掉的问题

在之前的文章中也有写一些页面跳转,和页面对应的释放问题,但是对于新手来讲,有时候总是会忘记release;很多时候页面的确是跳转过去了,但是关闭页面的时候,内存释放不掉,在这里我也根据我在之前的一段时间的学习和应用中,总结了我遇到过的几种可能性

1、手动释放内存的:

一定要注意,有些对象没有释放的话,页面一样可以释放掉,比如NSString 、NSMutableArray 等等这样的对象,,只不过会造成内存泄露。

但是对于一些视图类的对象,如果不释放,即使关闭页面,内存也释放不掉,比如UIView *view  UIImageView *view  UIScrollview *view 等等,这里面的view都要释放掉才能保证内存及时准确的释放

            secondview *sec = [[secondview alloc]initWithNibName:@"secondview" bundle:nil];
            [self presentViewController:sec animated:NO completion:^{}];
            [sec release];
而且在跳转页面的时候,上面代码里面的这个也要保证释放过

2、使用ARC自动回收机制的

使用自动回收机制的,我们不用吧注意力几种到release上,但是同样的,他的回收也是我们不可控制的,这就导致有些时候,对象release不了导致页面释放不了,比如说,页面跳转的时候,我们定义一个全局变量  (secondview 是额外的一个类页面)

@interface ViewController (){
    secondview *sec;
}
然后我们在跳转事件的时候这样写
            sec = [[secondview alloc]initWithNibName:@"secondview" bundle:nil];
            [self presentViewController:sec animated:NO completion:^{}];
这样页面跳转过去之后,即使关闭页面,这个页面内存也释放不掉,这个也提醒我们,我们在使用 全局变量的时候,要多留意了

3、页面中有循环回调函数的:

如果页面中有循环回调函数,页面关闭的时候也关不掉,比如我之前写了一个页面,上面是有一张图片的不停旋转

-(void)startAnimation:(UIImageView *)view{
    CGAffineTransform endAngle = CGAffineTransformMakeRotation(angle * (M_PI / 180.0f));
    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
        view.transform = endAngle;
    } completion:^(BOOL finished) {
        angle += 1;
        [self startAnimation:view];
    }];
}
如果在方法中直接这样写得话,内存是释放不掉的, 为了避免这种状况,我们需要加判断,在关闭页面的时候让他不能继续回调;设置一个BOOL变量 haveClosed;并初始化为YES;在关闭页面的时候,将haveClosed设置为NO;旋转的函数改写为:
-(void)startAnimation:(UIImageView *)view{
    CGAffineTransform endAngle = CGAffineTransformMakeRotation(angle * (M_PI / 180.0f));
    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
        view.transform = endAngle;
    } completion:^(BOOL finished) {
       if(haveClosed == YES){
        angle += 1;
        [self startAnimation:view];
    }else{
        return ;
       } 
    }];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值