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

RunLoop

初识RunLoop运行循环 目的作用:1.保证启动的程序不退出;2.负责监听事件,触摸、时钟、网络事件;3.Runloop做完一件事,它就会sleep;4.Runloop负责在一次循环中渲染UI。...针对first一中的 我们把timer事件添加到了runloop的默认环境下,当应用程序启动当时候,我们没有做任何操作,timer事件来了,runloop就切换都默认模式下去执行timer事件,执行完毕后就马上睡觉...,timer事件又来,runloop又切换到默认模式下执行timer事件,执行完又睡觉,当这个时候你拖住了我们的界面,你就出发了UI模式下的source事件,runloop就马上处理source事件,你没有松手就一直处理...UI模式下的source事件,runloop 就无法再去处理默认模式下的timer 事件。...因为自线程的runloop默认不循环,怎么办,开启子线程的runloop循环。 [[NSRunLoopcurrentRunLoop]run];//让runloop循环起来,这是个死循环!!!!!

26310

RunLoop

RunLoop,就是一个循环,但是当面试官问题RunLoop 休眠之后怎么被唤醒的?...RunLoop和线程的关系是怎么维护的?等等这一系列相关问答的时候你能否回答出来,如果不能那可以继续往下看,我们一起研究下神奇的RunLoop!...2.RunLoop内部结构(组成) 在CFRunLoop源码中有5个类跟RunLoop相关 CFRunLoopRef:代表 RunLoop 的对象 CFRunLoopModeRef:代表 RunLoop...所以,我们就有了 RunLoop。 一条线程对应一个RunLoop对象,每条线程都有唯一一个与之对应的 RunLoop 对象。...RunLoop 对象在第一次获取 RunLoop 时创建,销毁则是在线程结束的时候。 主线程的 RunLoop 对象系统自动帮助我们创建好了,而子线程的 RunLoop对象需要我们主动创建和维护。

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

RunLoop

RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。...线程刚创建时并没有 RunLoop,如果你不主动获取,那它一直都不会有。RunLoop 的创建是发生在第一次获取时,RunLoop 的销毁是发生在线程结束时。...当其加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。...RunLoop 的内部逻辑 根据苹果在文档里的说明,RunLoop 内部的逻辑大致如下: ? 可以看到,实际上 RunLoop 就是这样一个函数,其内部是一个 do-while 循环。...RunLoop 的底层实现 从上面代码可以看到,RunLoop 的核心是基于 mach port 的,其进入休眠时调用的函数是 mach_msg()。

80520

RunLoop总结:RunLoop基础知识

没有实际应用场景,很难理解一些抽象空洞的东西,所以前面几篇文章先介绍了RunLoop的几个使用场景。 另外AsyncDisplayKit中也有大量使用RunLoop的示例。...关于实际的使用RunLoop 的案例和使用场景就不总结了,今天总结一点RunLoop的基础知识和概念。 什么是RunLoop? 顾名思义,它就是一个运行循环。...如何创建一个RunLoop? 包括MainRunLoop在内,每一个RunLoop都与一个线程关联着。确切的说,是先有线程,再有RunLoop。...关于线程与RunLoop的关系,在RunLoop官方文档的第一节讲的很清楚。 我们不用,也最好不要显示的创建RunLoop,苹果提供了两个API,便于我们来获取RunLoop。...关于RunLoop中的多种结构体以及RunLoop中的主要逻辑部分就先总结到这儿了。

74920

iOS RunLoop RunLoop相关类

Core Foundation框架下关于RunLoop的5个类,只有弄懂这几个类的含义,我们才能深入了解RunLoop运行机制。...CFRunLoopRef:代表RunLoop的对象 CFRunLoopModeRef:RunLoop的运行模式 CFRunLoopSourceRef:就是RunLoop模型图中提到的输入源/事件源...CFRunLoopTimerRef:就是RunLoop模型图中提到的定时源 CFRunLoopObserverRef:观察者,能够监听RunLoop的状态改变 下边详细讲解下几种类的具体含义和关系...我们可通过以下方式来获取RunLoop对象: Core Foundation CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象 CFRunLoopGetMain()...可以看到RunLoop的状态在不断的改变,最终变成了状态 32,也就是即将进入睡眠状态,说明RunLoop之后就会进入睡眠状态。

30830

再谈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会被唤醒以执行那个回调。

76940

RunLoop解读

首先,Runloop是跟线程挂钩的,一个线程只能有唯一对应的Runloop,当然根Runloop 可以嵌套子Runloop,不过这种情况使用的并不多。...下面将会从Runloop的基本构造,Runloop的运行逻辑 以及 与Runloop相关的一些应用场景 三个方面介绍RunloopRunloop的基本构造 ?...RunLoop的运行逻辑 了解了Runloop 的基本构造后,我们来看下Runloop 内部的运行逻辑。...RunLoop相关的一些应用场景 在知道了Runloop的基本构造以及运行流程之后,我们来了解下与Runloop相关的一些场景: AutoreleasePool App启动后,苹果在主线程 RunLoop...这篇文章从Runloop的基本构造,Runloop的运行逻辑 以及 与Runloop相关的一些应用场景 三个方面入手,对Runloop的原理和机制进行了初步的探究,希望对大家了解Runloop运行机制方面有一定的帮助

1K70

RunLoop总结:RunLoop 与GCD 、Autorelease Pool之间的关系

如果在面试中问到RunLoop相关的知识,很有可能也会问到RunLoop与GCD、Autorelease Pool有没有关系,哪些地方用到了GCD、Autorelease Pool等。...So,本文就总结一下RunLoop与GCD和 Autorelease Pool 之间的关系,看看在RunLoop实现中,哪些地方间接或者直接使用、操作到了GCD 和Autorelease Pool。...RunLoop 与GCD 的关系 在RunLoop 中大量使用到了GCD,首先来看一下 CFRrunLoop.c 中引入的其他头文件。...1.RunLoop 的超时时间 我们在前面介绍过RunLoop 启动在 CoreFoudation 库中有两个API: //mode默认为defaultMode、超时时间是100亿秒、false void...RunLoop 与 Autorelease Pool的关系 RunLoop与 Autorelease Pool 有关系么? 有。

1K51

再谈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会被唤醒以执行那个回调。

67641

iOS RunLoop

所以,我们就有了RunLoop。 ●每条线程都有唯一一个与之对应的RunLoop对象。 ●我们只能在当前线程中操作当前线程的RunLoop,而不能去操作其他线程的RunLoop。...●RunLoop对象在第一次获取RunLoop时创建,销毁则是在线程结束的时候。 ●主线程的RunLoop对象系统自动帮助我们创建好了,而子线程的RunLoop对象需要我们主动创建。...3.RunLoop 相关类 下面我们来了解一下Core Foundation框架下关于RunLoop的5个类,只有弄懂这几个类的含义,我们才能深入了解RunLoop运行机制。...4.RunLoop原理 好了,五个类都讲解完了,我们就可以来理解RunLoop的运行逻辑了。 ?...进入步骤2 ○如果输入源启动,传递相应的消息 ○如果RunLoop被显示唤醒而且时间还没超时,重启RunLoop。进入步骤2 10.通知观察者RunLoop结束。

50320

Runloop(1):基础

runloop已经唤醒,但是唤醒runloop的是事件还没有处理。...只有在你开启了子线程的情况下才需要运行runloop,主线程的runloop是框架基础,框架提供了代码来运行runloop并且自动开启。应用启动时主线程的runloop就会跟随运行。...runloop,你要准备好在合适的时候退出该子线程,因为相比于强制让runloop终止,通过让线程终止来让runloop退出更好。...退出runloop有两种方式: 给runloop设置一个超时时间 告诉runloop停止 如果可以的话,设置超时时间是首选,指定超时时间可以让runloop在退出之前,完成所有正常处理包含,传递runloop...的通知; 用CFRunLoopStop来停止runloop和超时效果差不多,runloop会发送完剩余的通知然后退出,不同的是你可以在无条件开启runloop时用这种方式来退出; 尽管移除runloop

28220
领券