首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RunLoop

针对first一中的 我们把timer事件添加到了runloop的默认环境下,当应用程序启动当时候,我们没有做任何操作,timer事件来了,runloop就切换都默认模式下去执行timer事件,执行完毕后就马上睡觉...,timer事件又来,runloop又切换到默认模式下执行timer事件,执行完又睡觉,当这个时候你拖住了我们的界面,你就出发了UI模式下的source事件,runloop就马上处理source事件,你没有松手就一直处理...UI模式下的source事件,runloop 就无法再去处理默认模式下的timer 事件。...针对上述现象 我们设想 把timer添加到UI模式下如何 //这样写不会加入runloop NSTimer*timer = [NSTimertimerWithTimeInterval:1.0target...UITrackingRunLoopMode当UI交互的时候runloop优先切换的模式,处理UI交互。

30110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RunLoop

    RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。...线程刚创建时并没有 RunLoop,如果你不主动获取,那它一直都不会有。RunLoop 的创建是发生在第一次获取时,RunLoop 的销毁是发生在线程结束时。...当其加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。...NSDefaultRunLoopMode(kCFRunLoopDefaultMode) NSRunLoopCommonModes(kCFRunLoopCommonModes) 这里有个概念叫 “CommonModes”(混合模式...ASDK 仿照 QuartzCore/UIKit 框架的模式,实现了一套类似的界面更新的机制:即在主线程的 RunLoop 中添加一个 Observer,监听了 kCFRunLoopBeforeWaiting

    84320

    RunLoop总结:RunLoop基础知识

    关于实际的使用RunLoop 的案例和使用场景就不总结了,今天总结一点RunLoop的基础知识和概念。 什么是RunLoop? 顾名思义,它就是一个运行循环。..._winthread; CFMutableSetRef _commonModes; // set 中保存的就是 NSRunLoopCommonModes表示的mode,我们也可以将自定义的...如何创建一个RunLoop? 包括MainRunLoop在内,每一个RunLoop都与一个线程关联着。确切的说,是先有线程,再有RunLoop。...关于线程与RunLoop的关系,在RunLoop官方文档的第一节讲的很清楚。 我们不用,也最好不要显示的创建RunLoop,苹果提供了两个API,便于我们来获取RunLoop。...当然我们可以把自定义的Mode 添加都CommonModes中,可以使用如下的API来操作: CFRunLoopAddCommonMode(CFRunLoopRef runloop, CFStringRef

    82320

    iOS多线程:『RunLoop』详尽总结RunLoop

    一个RunLoop对象(CFRunLoopRef)中包含若干个运行模式(CFRunLoopModeRef)。...每次RunLoop启动时,只能指定其中一个运行模式(CFRunLoopModeRef),这个运行模式(CFRunLoopModeRef)被称作CurrentMode。...而当我们拖动Text View的时候,RunLoop就结束NSDefaultRunLoopMode,切换到了UITrackingRunLoopMode模式下,这个模式下没有添加NSTimer,所以我们的...但当我们松开鼠标的时候,RunLoop就结束UITrackingRunLoopMode模式,又切换回NSDefaultRunLoopMode模式,所以NSTimer就又开始正常工作了。...第一种按照官方文档来分类(就像RunLoop模型图中那样): Port-Based Sources(基于端口) Custom Input Sources(自定义) Cocoa Perform Selector

    2.1K50

    再谈RunLoop

    RunLoop 一 概述: 一句话解释RunLoop:运行任务的循环。 为什么要有RunLoop:解决交互式UI设计中的一个问题,如何快速响应用户输入,如何快速将程序运行结果输出到屏幕?...实现: 接下来的章节中我们将实际实现一个基本的runloop, 同样很阳春,具备这么些个功能: runloop 的启动、退出机制 任务注册 runloop重入,loop一段指定的时间 autorelease...//kick up runloop runloop_run(); return 0; } 瞧,这就是main函数的全部了,分两部分:注册任务和启动runloop。...一个runloop,一个线程。 当启动一个新的线程的时候, 这个线程并不会自动拥有一个 runloop,你必须自己完成创建等工作。 没有runloop,没有autorelease。...当其加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。

    81340

    RunLoop解读

    首先,Runloop是跟线程挂钩的,一个线程只能有唯一对应的Runloop,当然根Runloop 可以嵌套子Runloop,不过这种情况使用的并不多。...下面将会从Runloop的基本构造,Runloop的运行逻辑 以及 与Runloop相关的一些应用场景 三个方面介绍Runloop。 Runloop的基本构造 ?...每次Runloop运行在其中一种模式(mode)下,如果想切换另一种模式,必须退出当前Runloop,再重新进入,也就是说mode与mode之间是相互隔离的。...RunLoop的运行逻辑 了解了Runloop 的基本构造后,我们来看下Runloop 内部的运行逻辑。...这篇文章从Runloop的基本构造,Runloop的运行逻辑 以及 与Runloop相关的一些应用场景 三个方面入手,对Runloop的原理和机制进行了初步的探究,希望对大家了解Runloop运行机制方面有一定的帮助

    1.1K70

    RunLoop数据结构、RunLoop的实现机制、RunLoop的Mode、RunLoop与NSTimer和线程

    ,并执行了一段无限循环的代码(不是简单的for循环或while循环) //无限循环代码模式(伪代码) int main(int argc, char * argv[]) { BOOL...:RunLoop对象 CFRunLoopMode:运行模式 CFRunLoopSource:输入源/事件源 CFRunLoopTimer:定时源 CFRunLoopObserver:观察者 1、...CFRunLoop 由pthread(线程对象,说明RunLoop和线程是一一对应的)、currentMode(当前所处的运行模式)、modes(多个运行模式的集合)、commonModes(模式名称字符串集合...:默认模式,主线程是在这个运行模式下运行 UITrackingRunLoopMode:跟踪用户交互事件(用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他Mode影响) UIInitializationRunLoopMode...:在刚启动App时第进入的第一个 Mode,启动完成后就不再使用 GSEventReceiveRunLoopMode:接受系统内部事件,通常用不到 kCFRunLoopCommonModes:伪模式,不是一种真正的运行模式

    64040

    深入浅出 RunLoop(五):RunLoop 与 NSTimer

    解决 tableview 滑动时 NSTimer 失效的问题 问题:由前面的文章我们知道,RunLoop同一时间只能运行在一种模式下,当我们滑动tableview/scrollview的时候RunLoop...如果我们的NSTimer是添加到RunLoop的KCFRunLoopDefaultMode/NSDefaultRunLoopMode默认模式下的话,此时是会失效的。...解决:我们可以将NSTimer添加到RunLoop的KCFRunLoopCommonModes/NSRunLoopCommonModes通用模式下,来保证无论在默认模式还是界面追踪模式下NSTimer都可以执行...repeats:YES block:^(NSTimer * _Nonnull timer) { NSLog(@"123"); }]; 我们可以通过以下方法创建NSTimer,来自定义添加到...添加到RunLoop的 _commonModeItems 集合中,并同步该timer到 _commonModes 里的所有模式中,这样无论在默认模式还是界面追踪模式下NSTimer都可以执行。

    81110

    iOS RunLoop

    ●每次 RunLoop 启动时,只能指定其中一个运行模式(CFRunLoopModeRef),这个运行模式(CFRunLoopModeRef)被称作当前运行模式(CurrentMode)。.../ 获得主线程的 RunLoop 对象 3.2CFRunLoopModeRef 系统默认定义了多种运行模式(CFRunLoopModeRef) ●kCFRunLoopDefaultMode:App的默认运行模式...●而当我们拖动Scroll View的时候,RunLoop就结束NSDefaultRunLoopMode,切换到了UITrackingRunLoopMode模式下,这个模式下没有添加NSTimer,所以我们的...●但当我们松开鼠标的时候,RunLoop就结束UITrackingRunLoopMode模式,又切换回NSDefaultRunLoopMode模式,所以NSTimer就又开始正常工作了。...第一种按照官方文档来分类: Port-Based Sources(基于端口) Custom Input Sources(自定义) Cocoa Perform Selector Sources 第二种按照函数调用栈来分类

    53720

    再谈RunLoop

    RunLoop 一 概述: 一句话解释RunLoop:运行任务的循环。 为什么要有RunLoop:解决交互式UI设计中的一个问题,如何快速响应用户输入,如何快速将程序运行结果输出到屏幕?...实现: 接下来的章节中我们将实际实现一个基本的runloop, 同样很阳春,具备这么些个功能: runloop 的启动、退出机制 任务注册 runloop重入,loop一段指定的时间 autorelease...//kick up runloop runloop_run(); return 0; } 瞧,这就是main函数的全部了,分两部分:注册任务和启动runloop。...一个runloop,一个线程。 当启动一个新的线程的时候, 这个线程并不会自动拥有一个 runloop,你必须自己完成创建等工作。 没有runloop,没有autorelease。...当其加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。

    70941

    Foundation-RunLoop

    介绍 1.RunLoop 类提供一些接口管理输入源对象 2.RunLoop 对象处理像键盘,鼠标等事件,以及Port和NSConnection 对象,还处理Timer 事件 *使用须知 1.不能自己创建或者管理...RunLoop对象,因为每个线程都会在需要的时候自动创建属于自己的RunLoop 对象,我们可以通过current()方法进入当前线程的run loop 2.RunLoop 没有考虑线程安全,所以前往不要在其他线程调用当前线程的...RunLoop,会造成意想不到的错误 ---- 方法深入研究 a.获取当前线程 let runloop = RunLoop.current print(runloop) 运行结果: <CFRunLoop...= "异步线程" let runloop = RunLoop.current let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats...: "酷走天涯") 下面是控制器自定义的几个方法 func input1(_ threadName:String){ print(threadName + "酷走天涯1") } func

    71420

    深入浅出 RunLoop(四):RunLoop 与线程

    RunLoop 与线程的关系 苹果官方文档中,RunLoop的相关介绍写在线程编程指南中,可见RunLoop和线程的关系不一般。...Threading Programming Guide(苹果官方文档) RunLoop对象和线程是一一对应关系; RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop...作为value; 如果没有RunLoop,线程执行完任务就会退出;如果没有RunLoop,主线程执行完main()函数就会退出,程序就不能处于运行状态; RunLoop创建时机:线程刚创建时并没有RunLoop...对象,RunLoop会在第一次获取它时创建; RunLoop销毁时机:RunLoop会在线程结束时销毁; 主线程的RunLoop已经自动获取(创建),子线程默认没有开启RunLoop; 主线程的RunLoop...: 方法,以运行在 NSDefaultRunLoopMode 模式下 换句话说,该方法有效地开启了一个无限的循环,处理来自 RunLoop 的输入源 Sources 和 Timers

    1.7K10
    领券