美文网首页
NSTimer定时器的销毁

NSTimer定时器的销毁

作者: ibiaoma | 来源:发表于2017-10-13 10:25 被阅读98次

定时器的销毁

1、如果是在VC中创建的定时器,需要在dealloc方法中销毁

    - (void)dealloc{
          [_timer invalidate];
          _timer = nil;
    }

2、有时会自定义View,并且在这个View中创建定时器,这时直接在dealloc中销毁是无效的,

     _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(startCount)                          
       userInfo:nil repeats:YES];

因为创建定时器的时候,已经对self进行了强引用,所以self的dealloc不会调用的。
解决方法是在View的willMoveToSuperview方法中销毁

    - (void)willMoveToSuperview:(UIView *)newSuperview {
        [super willMoveToSuperview:newSuperview];
        if (! newSuperview && self.timer) {
            // 销毁定时器
            [self.timer invalidate];
            self.timer = nil;
        }
    }

补充:用递归代替定时器

(每间隔一秒钟就执行一次这个方法,如果需要停止,只要进入方法时return掉,就可以了,也不需要考虑循环引用的问题)

    - (void)countTime:(UIButton *)btn{
        NSLog(@"%s count = %ld",__FUNCTION__,count);

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
             if (count <= 1) {//恢复起始状态,准备重新倒计时
                count = 120;
                return ;
            }else{
                [self countTime:btn];    //递归
            }
        });
    }

相关文章

  • NSTimer 定时器销毁

    前言:记得之前看过一个面试题问:ARC环境下的dealloc方法有什么用?问题解答是:代理指针置空,停止定时器ti...

  • NSTimer销毁时遇到的坑

    NSTimer是iOS常用的定时器,但是销毁却是一件麻烦的事情。 这段代码是常用的创建NSTimer的方式,并把t...

  • NSTimer定时器的销毁

    定时器的销毁 1、如果是在VC中创建的定时器,需要在dealloc方法中销毁 2、有时会自定义View,并且在这个...

  • iOS使用WKWebView不调用dealloc

    1、使用了定时器,NSTimer没有销毁 2、delegate属性使用weak、asign修饰符 3、block使...

  • 关于NSTimer的事,cell 中含有倒计时

    1.在项目中遇到过开启NSTimer事件后 控制器不销毁 不走dealloc 方法,以至于 不能销毁掉定时器,那我...

  • 如何释放Cell中的NSTimer

    问题 Cell中使用了NSTimer做倒计时功能,在Cell的dealloc方法中销毁定时器[self.timer...

  • iOS从timer释放问题看内存管理

    在iOS的开发中,如果使用NSTimer做定时器,一定要在合适的时机销毁这个定时器,不然可能导致内存得不到释放。原...

  • 无标题文章

    iOS NSTimer使用详解-开启、关闭、移除 定时器定时器详解ios定时器关闭定时器NSTimer 1、要使用...

  • 防止内存泄露的NSTimer定时器

    目录 NSTimer的基础用法 NSTimer的内存泄露 安全防侧漏的定时器 NSTimer的基础用法 创建定时器...

  • 定时器的使用介绍

    iOS中的定时器大致分为这几类: NSTimer CADisplayLink GCD定时器 (一)NSTimer ...

网友评论

      本文标题:NSTimer定时器的销毁

      本文链接:https://www.haomeiwen.com/subject/gnaayxtx.html