RunLoop学习小记

RunLoop学习小记

先描述一个场景,scrollView上有一个定时器,但是每当我们滑动scrollView时,定时器就不走了,这可能使得倒计时的时间不准,原因是什么呢?怎么解决呢?这就用到了RunLoop的知识了。

当我们创建一个定时器,并且加入到RunLoop中,我们会有如下代码:

NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {

            NSLog(@"创建一个定时器");

        }];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

这样,我们就创建了一个定时器,并且每一秒打印一下。但是,如果这个我们此时拖动在同一个界面的scrollView时,我们会发现,在我们拖动的时候定时器不动了,不拖动的时候,定时器又恢复了正常,问题在哪呢?

原来是NSDefaultRunLoopMode这个参数!

于是我们换成了UITrackingRunLoopMode,我们却惊喜的发现,当我们滑动的时候打印,不滑动的时候却不打印了。

NSDefaultRunLoopMode(默认模式)

UITrackingRunLoopMode (UI模式)

当我们把这两种mode都加上,结果正如我们所料,打印正常了。

有没有一个mode就能完成这两种模式的效果呢?

答案是有的!

当mode为NSRunLoopCommonModes时,就完成了刚才的操作。相当于两种mode都添加上了,滑动scrollView就不会影响倒计时了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、什么是runloop 字面意思是“消息循环、运行循环”。它不是线程,但它和线程息息相关。一般来讲,一个线程一次...
    WeiHing阅读 8,322评论 11 111
  • RunLoop 文章目录 RunLoop简介 1.1 什么是RunLoop? 1.2 RunLoop和线程 1.3...
    May_d8f1阅读 349评论 0 1
  • 文章目录RunLoop简介1.1 什么是RunLoop? 1.2 RunLoop和线程1.3 默认情况下主线程的R...
    lusen_b阅读 464评论 0 2
  • RunLoop的定义与概念RunLoop的主要作用main函数中的RunLoopRunLoop与线程的关系RunL...
    __silhouette阅读 1,076评论 0 6
  • 在萧山鸟幸居酒屋工作的时候,第一个月基本上都是在打酱油,由于应聘的工作是服务生,一天下来都属于脸都笑僵的类型。 一...
    最爱颠茄小F阅读 427评论 0 0

友情链接更多精彩内容