美文网首页UI
如何在UIView中正确地移除定时器NSTimer

如何在UIView中正确地移除定时器NSTimer

作者: lesmiserables0 | 来源:发表于2019-06-19 11:31 被阅读0次
这个问题的关键在于 UIView 的生命周期。
- (void)didAddSubview:(UIView *)subview;
- (void)willRemoveSubview:(UIView *)subview;
- (void)willMoveToSuperview:(nullable UIView *)newSuperview;
- (void)didMoveToSuperview;
- (void)willMoveToWindow:(nullable UIWindow *)newWindow;
- (void)didMoveToWindow;

有兴趣的同学可以 自己验证一下 这些方法的调用顺序。
这里直接抛结论:

从上往下依次执行,但下面这四个方法比较特殊,调了两次。
- (void)willMoveToSuperview:(nullable UIView *)newSuperview;
- (void)didMoveToSuperview;
- (void)willMoveToWindow:(nullable UIWindow *)newWindow;
- (void)didMoveToWindow;

官方给出的解释是:

view的父类变化时,无论是添加还是移除,都是调用will和did两个方法。一次是add,一次是remove。带参数的will方法中,参数不为空是添加,为空时移除

代码如下:

-(void)willMoveToWindow:(UIWindow *)newWindow{
    if (!newWindow) {
        if (_timer) {
            [_timer invalidate];
            _timer = nil;
        }
    }
}

相关文章

  • 如何在UIView中正确地移除定时器NSTimer

    这个问题的关键在于 UIView 的生命周期。 有兴趣的同学可以 自己验证一下 这些方法的调用顺序。这里直接抛结论...

  • 无标题文章

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

  • 定时器的使用介绍

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

  • GCD定时器使用

    iOS中的常用定时器分为这几类: NSTimer CADisplayLink GCD定时器 选择GCD定时器原因:...

  • OC定时器

    定时器方法 NSTimer * timer=[NSTimer timerWithTimeInterval:2.0 ...

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

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

  • Quartz2D之CADisplayLink

    定时器 在绘图的过程中,如果需要使用定时器,通常第一反应是使用NSTimer,但是NSTimer的缺点就让绘制出来...

  • iOS 高效定时器

    一、中心化管理NSTimer定时器 日常使用中如果我们将NSTimer定时器作为视图控制器的属性,那么在这个视图控...

  • GCD 实现定时器

    NSTimer的定时器方法 About NSTimer GCD中使用dispatch_source_t实现定时器 ...

  • iOS timer定时器正确使用方式

    1. 初始化,添加定时器前先移除 2. 释放timer 3. NSTimer不释放原因 原因是 Timer 添加到...

网友评论

    本文标题:如何在UIView中正确地移除定时器NSTimer

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