首页
学习
活动
专区
圈层
工具
发布
综合排序最热优先最新优先
时间不限
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循环起来,这是个死循环!!!!!
编程那点事
2023-02-25
5040
标签:
RunLoop
RunLoop 与线程的关系 苹果不允许直接创建 RunLoop,它只提供了两个自动获取的函数:CFRunLoopGetMain() 和 CFRunLoopGetCurrent()。 线程和 RunLoop 之间是一一对应的,其关系是保存在一个全局的 Dictionary 里。线程刚创建时并没有 RunLoop,如果你不主动获取,那它一直都不会有。 RunLoop 的创建是发生在第一次获取时,RunLoop 的销毁是发生在线程结束时。你只能在一个线程的内部获取其 RunLoop(主线程除外)。 RunLoop 对外的接口 一个 RunLoop 包含若干个 Mode,每次调用 RunLoop 的主函数时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode。 RunLoop_1.png 总结下来就是:RunLoop 其内部是一个 do-while 循环。
大壮
2018-06-19
6820
标签:
RunLoop
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。 线程刚创建时并没有 RunLoop,如果你不主动获取,那它一直都不会有。RunLoop 的创建是发生在第一次获取时,RunLoop 的销毁是发生在线程结束时。 当其加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。 RunLoop 的内部逻辑 根据苹果在文档里的说明,RunLoop 内部的逻辑大致如下: ? 可以看到,实际上 RunLoop 就是这样一个函数,其内部是一个 do-while 循环。 RunLoop 的底层实现 从上面代码可以看到,RunLoop 的核心是基于 mach port 的,其进入休眠时调用的函数是 mach_msg()。
用户2491699
2018-08-09
1.2K0
标签:
RunLoop
RunLoop,就是一个循环,但是当面试官问题RunLoop 休眠之后怎么被唤醒的? RunLoop和线程的关系是怎么维护的?等等这一系列相关问答的时候你能否回答出来,如果不能那可以继续往下看,我们一起研究下神奇的RunLoop! 2.RunLoop内部结构(组成) 在CFRunLoop源码中有5个类跟RunLoop相关 CFRunLoopRef:代表 RunLoop 的对象 CFRunLoopModeRef:代表 RunLoop 所以,我们就有了 RunLoop。 一条线程对应一个RunLoop对象,每条线程都有唯一一个与之对应的 RunLoop 对象。 RunLoop 对象在第一次获取 RunLoop 时创建,销毁则是在线程结束的时候。 主线程的 RunLoop 对象系统自动帮助我们创建好了,而子线程的 RunLoop对象需要我们主动创建和维护。
陈雨尘
2021-02-04
7700
标签:
RunLoop总结:RunLoop基础知识
没有实际应用场景,很难理解一些抽象空洞的东西,所以前面几篇文章先介绍了RunLoop的几个使用场景。 另外AsyncDisplayKit中也有大量使用RunLoop的示例。 关于实际的使用RunLoop 的案例和使用场景就不总结了,今天总结一点RunLoop的基础知识和概念。 什么是RunLoop? 顾名思义,它就是一个运行循环。 如何创建一个RunLoop? 包括MainRunLoop在内,每一个RunLoop都与一个线程关联着。确切的说,是先有线程,再有RunLoop。 关于线程与RunLoop的关系,在RunLoop官方文档的第一节讲的很清楚。 我们不用,也最好不要显示的创建RunLoop,苹果提供了两个API,便于我们来获取RunLoop。 关于RunLoop中的多种结构体以及RunLoop中的主要逻辑部分就先总结到这儿了。
Haley_Wong
2018-08-22
1.1K0
标签:
iOS多线程:『RunLoop』详尽总结RunLoop
RunLoop 文章目录 RunLoop简介 1.1 什么是RunLoop? 所以,我们就有了RunLoop。 一条线程对应一个RunLoop对象,每条线程都有唯一一个与之对应的RunLoop对象。 我们只能在当前线程中操作当前线程的RunLoop,而不能去操作其他线程的RunLoopRunLoop对象在第一次获取RunLoop时创建,销毁则是在线程结束的时候。 RunLoop相关类 下面我们来了解一下Core Foundation框架下关于RunLoop的5个类,只有弄懂这几个类的含义,我们才能深入了解RunLoop运行机制。 RunLoop运行逻辑图 这张图对于我们理解RunLoop来说太有帮助了,下边我们可以来说下官方文档给我们的RunLoop逻辑。
程序员充电站
2018-05-31
2.7K0
标签:
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之后就会进入睡眠状态。
conanma
2021-09-02
6030
标签:
Runloop的再理解(Runloop下)
1,Runloop是什么? 我们知道,Runloop可以保证线程不退出,那么,为什么Runloop具有此功效呢?那就要从Runloop的定义说起。 Runloop的字面意思是运行循环,但是我们不要忘了,Runloop其实也是一个对象,它位于CoreFoundation框架下。 Runloop可以监控上面的Runloop事件,具体流程如下图: ? Runloop源码解析 <一>Runloop实现 1,获取Runloop 从苹果开放的API来看,不允许我们直接创建Runloop对象,只能通过以下几个函数来获取Runloop: CFRunloopRef 不管获取子线程的runloop还是获取主线程的runloop,当存储线程与runloop对应关系的全局字典不存在时,都会创建并初始化该全局字典。
拉维
2019-10-28
1.1K0
标签:
RunLoop源码阅读RunLoop源码阅读
[toc] RunLoop概念 ? 的关系 CFRunLoopGetMain(void) //获取主线程的runloop CFRunLoopGetCurrent(void) //获取当前线程的runloop CF_EXPORT CFRunLoopRef 睡眠 __CFRunLoopServiceMachPort(::::) 睡眠后有4种情况可以唤醒runloop: 基于port的source事件 timer事件 runloop超时 外部手动触发唤醒 事实上 每当RunLoop的内容发生变化时,RunLoop都会自动将commonModeItems里的Source/Observer/Timer 同步到具有 “Common” 标记的所有Mode里。 一般情况下被commone就是同时放入这两个mode的itemmode中 3,runloop是存在__CFRunLoops,而__CFRunLoops是一个全局的字典,和runloop本身无关。
用户8893176
2021-08-09
1.6K0
标签:
再谈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会被唤醒以执行那个回调。
王大锤
2018-05-17
1.1K0
标签:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档