美文网首页
RunLoop讲解

RunLoop讲解

作者: Bink | 来源:发表于2017-02-22 09:39 被阅读15次

一般主线程会自动运行runloop,我们一般情况下不用管。而在子线程中,我们需要手动去运行它。你可以把它想象成一个循环,如果没有这个循环,子线程完成任务后,这个线程就结束了。所以这个时候我们就要运行一个runloop,用于处理种种事件,而让它不结束。而没有事件发生的时候, 会处于休眠状态,以节省电量。

那么一般在什么情况下用到呢

需要使用Port或者自定义Input Source与其他线程进行通讯。

需要在线程中使用Timer。

需要在线程上使用performSelector*****方法。

需要让线程执行周期性的工作。

举个例子 定义一个NSTimer来隔一会调用某个方法  但这时你在拖动textVIew不放手  主线程就被占用了。 timer的监听方法就不调用  直到你松手 ,,这时吧nstimer加到 runloop里  就相当于告诉主循环 腾出点时间来给timer  ,再拖动textView就不会因主线程被占用而不调用了


应用场景举例:主线程的 RunLoop 里有两个预置的 Mode:kCFRunLoopDefaultMode 和 UITrackingRunLoopMode。这两个 Mode 都已经被标记为"Common"属性。DefaultMode 是 App 平时所处的状态,TrackingRunLoopMode 是追踪 ScrollView 滑动时的状态。当你创建一个 Timer 并加到 DefaultMode 时,Timer 会得到重复回调,但此时滑动一个TableView时,RunLoop 会将 mode 切换为 TrackingRunLoopMode,这时 Timer 就不会被回调,并且也不会影响到滑动操作。

有时你需要一个 Timer,在两个 Mode 中都能得到回调,一种办法就是将这个 Timer 分别加入这两个 Mode。还有一种方式,就是将 Timer 加入到顶层的 RunLoop 的 "commonModeItems" 中。"commonModeItems" 被 RunLoop 自动更新到所有具有"Common"属性的 Mode 里去

// 下面一行timer是已经被添加进去

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

// 下面一行, 该线程的runloop会运行起来,timer才会起作用

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];

相关文章

  • iOS知识点(10)RunLoop

    深入理解RunLoop iOS---实例化讲解RunLoop iOS runloop iOS-RunLoop充满灵...

  • RunLoop讲解

    一般主线程会自动运行runloop,我们一般情况下不用管。而在子线程中,我们需要手动去运行它。你可以把它想象成一个...

  • runloop 讲解

    sources 包括 sources0(比如点击事件、performSelector)、sources1(基于po...

  • 实例化讲解RunLoop

    转自此处 实例化讲解RunLoop 之前看过很多有关RunLoop的文章,其中要么是主要介绍RunLoop的基本概...

  • IOS---实例化讲解RunLoop

    实例化讲解RunLoop 之前看过很多有关RunLoop的文章,其中要么是主要介绍RunLoop的基本概念,要么是...

  • RunLoop-基础概念(初识篇)

    学习这篇内容主要讲解RunLoop的概念,以及RunLoop和线程之间的关系。当然提及RunLoop也离不开Aut...

  • RunLoop的简单讲解

    runloop:运行循环。跑圈。基本作用:保持程序的基本运行。处理app的各种事件,比如触摸事件,定时器事件,se...

  • 实例化讲解 RunLoop

    来源:击水湘江 链接:http://www.jianshu.com/p/536184bfd163 实例化讲解Run...

  • RunLoop理解

    前言 RunLoop在iOS中扮演着很重要的角色,关于RunLoop的详细讲解网上有许多,推荐YYKit作者的 深...

  • iOS RunLoop实例代码

    前言 RunLoop在iOS中扮演着很重要的角色,关于RunLoop的详细讲解网上有许多,推荐YYKit作者的 深...

网友评论

      本文标题:RunLoop讲解

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