美文网首页iOS知识收录iOS Developer
iOS开发 解决scrollView滑动过程中NSTimer停止

iOS开发 解决scrollView滑动过程中NSTimer停止

作者: captainGao | 来源:发表于2017-11-25 17:01 被阅读18次

    我们在scrollView上面放一个UIButton 点击button开始倒计时,开发过程中最常用的地方也就是获取验证码的业务啦! 好多童鞋常用的方法就是创建了一个UITableView 在cell上面放了一个UIButton,点击button的时候启动一个NSTimer 然后开始倒计时,这时候你会发现 当我用手托住UITableView的时候,倒计时竟然神奇的停止了,这到底是为什么呢?!

    经过查阅资料发现,原来这与runloop密切相关,在这里呢,我们主要说一下NSRunloop

    runloop音译 运行循环,NSRunloop是iOS消息机制的处理模式,一个线程对应一个runloop 启动一个app的时候 主线程中的runloop是默认被创建好的,而子线程中的runloop需要自己手动去创建

    runloop的运行模式 mode主要分为以下几类

    NSDefaultRunLoopMode:默认Mode,通常主线程是在这个Mode下运行
    UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响
    UIInitializationRunLoopMode:在刚启动App时第进入的第一个 Mode,启动完成后就不再使用
    NSRunLoopCommonModes:这是一个占位用的Mode,不是一种真正的Mode
    当scrollView滑动的时候 mode处于UITrackingRunLoopMode的状态,而默认的情况下处于NSDefaultRunLoopMode的状态,如果runloop想要切换的话,需要退出当前runloop,所以我们通常把timer放到一个runloop中,代码如下:

    NSTimer *timer = [NSTimer timerWithTimeInterval:10.0 invocation:nil repeats:YES];[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

    相关文章

      网友评论

        本文标题:iOS开发 解决scrollView滑动过程中NSTimer停止

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