美文网首页iOS 底层原理
NSTimer 定时器相关问题汇总

NSTimer 定时器相关问题汇总

作者: 困惑困惑困惑 | 来源:发表于2020-04-08 20:31 被阅读0次

1:NSTimer的创建

- (void)viewDidLoad {
    [super viewDidLoad];

    NSTimer *timer1 =[NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(action:) userInfo:nil repeats:YES];
    [timer1 fire];

}
-(void)action:(NSTimer *)timer{
    NSLog(@"定时器开");
}

这时会发现timer的ation方法不会调用。
坑一:子线程启动定时器问题:
我们都知道iOS是通过runloop作为消息循环机制,主线程默认启动了runloop,可是子线程没有默认的runloop,因此,我们在子线程启动定时器是不生效的。

2.NSTimer计时停止失效(比如滑动屏幕的时候)


   NSTimer *timer1 =[NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(action:) userInfo:nil repeats:YES];
   [[NSRunLoop currentRunLoop] addTimer:timer1 forMode:NSDefaultRunLoopMode];
}

-(void)action:(NSTimer *)timer{
    NSLog(@"定时器开");
}

坑二:runloop的mode问题:

我们注意到schedule方式启动的timer是add到runloop的NSDefaultRunLoopMode中,这就会出现其他mode时timer得不到调度的问题。最常见的问题就是在UITrackingRunLoopMode,即UIScrollView滑动过程中定时器失效。

解决方式就是把timer add到runloop的NSRunLoopCommonModes。UITrackingRunLoopMode和kCFRunLoopDefaultMode都被标记为了common模式,所以只需要将timer的模式设置为NSRunLoopCommonModes,就可以在默认模式和追踪模式都能够运行。

相关文章

  • NSTimer 定时器相关问题汇总

    1:NSTimer的创建 这时会发现timer的ation方法不会调用。坑一:子线程启动定时器问题:我们都知道iO...

  • 内存管理

    一.面试问题 使用CADisplayLink、NSTimer有什么注意点?循环引用、NSTimer定时器不准 介绍...

  • 内存管理(NSTimer、autorelease、weak原理、

    总结一下我们在内存管理中处理方法,以及出现的常见问题 定时器相关的问题: 1 NSTimer的问题看如下的代码: ...

  • 1.定时器相关问题

    问题 1.定时器不准问题2.定时器内存泄漏问题 答案 1.定时器不准问题 1.当我们使用NSTimer/CADis...

  • 无标题文章

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

  • OC定时器

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

  • 定时器的使用介绍

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

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

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

  • GCD 实现定时器

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

  • 底层原理01:内存管理

    一、定时器 (CADisplayLink、NSTimer) CADisplayLink、NSTimer会对targ...

网友评论

    本文标题:NSTimer 定时器相关问题汇总

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