首页
学习
活动
专区
圈层
工具
发布

iOS RunLoop

2.RunLoop和线程 ●RunLoop和线程是息息相关的,我们知道线程的作用是用来执行特定的一个或多个任务,但是在默认情况下,线程执行完之后就会退出,就不能再执行任务了。...image.png 从上图中可以看出,RunLoop就是线程中的一个循环,RunLoop在循环中会不断检测,通过Input sources(输入源)和Timer sources(定时源)两种来源等待接受事件...●CFRunLoopTimerRef:就是RunLoop模型图中提到的定时源 ●CFRunLoopObserverRef:观察者,能够监听RunLoop的状态改变 下边详细讲解下几种类的具体含义和关系...Input Sources(自定义) Cocoa Perform Selector Sources 第二种按照函数调用栈来分类: Source0 :非基于Port Source1:基于Port,通过内核和其他线程通信...下边我们举个例子大致来了解一下函数调用栈和Source。 1.在我们的项目中的Main.storyboard中添加一个Button按钮,并添加点击动作。

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

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

    1.2 RunLoop和线程 1.3 默认情况下主线程的RunLoop原理 RunLoop相关类 2.1 CFRunLoopRef 2.2 CFRunLoopModeRef 2.3 CFRunLoopTimerRef...1.2 RunLoop和线程 RunLoop和线程是息息相关的,我们知道线程的作用是用来执行特定的一个或多个任务,但是在默认情况下,线程执行完之后就会退出,就不能再执行任务了。...1.3 默认情况下主线程的RunLoop原理 我们在启动一个iOS程序的时候,系统会调用创建项目时自动生成的main.m的文件。...:就是RunLoop模型图中提到的定时源 CFRunLoopObserverRef:观察者,能够监听RunLoop的状态改变 下边详细讲解下几种类的具体含义和关系。...---- iOS多线程详尽总结系列文章: iOS多线程:『pthread、NSThread』详尽总结 iOS多线程:『GCD』详尽总结 iOS多线程:『NSOperation』详尽总结 iOS多线程:『

    2.4K50

    iOS开发-RunLoop

    、Timer、Observer,那么就直接退出RunLoop RunLoop里面有两套api用来访问和使用RunLoop 1、Foundation--NSRunLoop 2、Core Foundation...--- CFRunloopRef 二者异同点: NSRunLoop和CFRunloopRef都代表RunLoop对象,NSRunLoop是对CFRunloopRef一层OC的封装 RunLoop与线程...NSDefaultRunLoopMode]; // 定时器会跑在标记为common modes的模式下 // 标记为common modes的模式:包含:UITrackingRunLoopMode和kCFRunLoopDefaultMode...dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); // 2.指定定时期开始的时间和间隔的时间...Custom Input (自定义事件) Cocoa Perform Selector Sources 按照函数的调用栈 Source0:非基于Port的 Source1:基于Port 通过内核和其他线程通信

    1.1K10

    iOS RunLoop的介绍

    启动,如果当前Mode中没有任何 Source(Sources0、Sources1)、Timer,那么就直接退出RunLoop 比较有意思的是,多线程是我们在 iOS 开发过程中比较常用的一个方式,但是可能大部分人并没有关注到...OSX/iOS 系统中,提供了两个这样的对象:NSRunLoop 和 CFRunLoopRef 。...RunLoop 与线程的关系 首先,iOS开发中能遇到两个线程对象: pthread_t 和 NSThread 。...iOS中定义一个默认的模式和几种常用的模式,可通过字符串name来指定模式。你也可以自定义模式,只需要一个自定义字符串name指定模式名称。...其实不然,下一篇文章,我们将介绍iOS中RunLoop的具体应用场景,尝试利用RunLoop的特性来实现一个类似的例子,给我们以后的开发和代码设计提供思路。

    1.5K100

    iOS学习——浅谈RunLoop

    1 RunLoop基础 1.1 RunLoop的基本作用 保持程序的持续运行(ios程序为什么能一直活着不会死) 处理app中的各种事件(比如触摸事件、定时器事件【NSTimer】、selector事件...类型的值  b 这个默认启动的Runloop是跟主线程相关联的 1.3 RunLoop对象 在iOS开发中有两套api来访问Runloop foundation框架【NSRunloop】 core...foundation框架【CFRunloopRef】 NSRunLoop和CFRunLoopRef都代表着RunLoop对象,它们是等价的,可以互相转换 NSRunLoop是基于CFRunLoopRef...的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API(Core Foundation层面) 1.4 RunLoop与线程 Runloop和线程的关系: 一个... CFRunloopSourceRef CFRunloopSourceRef是事件源也就是输入源,有两种分类模式;一种是按照苹果官方文档进行划分的,另一种是基于函数的调用栈来进行划分的(source0和source1

    89421

    iOS底层原理总结 - RunLoop

    面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? Runloop和线程的关系? timer 与 Runloop 的关系?...当没有事件消息传入的时候,RunLoop就休息了。这里只是简单的理解一下这张图,接下来我们来了解RunLoop对象和其一些相关类,来更深入的理解RunLoop运行流程。 三....因此每一个应用必须要有一个runloop, 我们知道主线程一开起来,就会跑一个和主线程对应的RunLoop,那么RunLoop一定是在程序的入口main函数中开启。...RunLoop和线程间的关系 每条线程都有唯一的一个与之对应的RunLoop对象 RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value 主线程的RunLoop...CF的内存管理(Core Foundation) 凡是带有Create、Copy、Retain等字眼的函数,创建出来的对象,都需要在最后做一次release GCD本来在iOS6.0

    1.6K70

    iOS源码分析(1)——RunLoop

    的存储方式是键值对,key是当前线程,value是runloop,线程和runloop是一对一的关系,当字典为空的时候会默认创建主线程的runloop,而子线程在获取的时候才会创建。...前者是系统默认的Runloop Mode,例如进入iOS程序默认不做任何操作就处于这种Mode中,滑动UIScrollView类型的View是,主线程就切换Runloop到到UITrackingRunLoopMode...Source1包含了一个mach_port和一个回调(函数指针),被用于通过内核和其他线程相互发送消息。这种类型的Source能主动唤醒RunLoop的线程。 ?...loop 两个runloop状态 我们可以使用 CFRunLoopObserverCreateWithHandler() 来创建 observer,创建时设置要监听的状态变化和回调,再用 CFRunLoopAddObserver...,也是objc_autoreleasePoolPush和objc_autoreleasePoolPop两个函数 ?

    97120

    iOS面试题:RunLoop剖析

    由pthread(线程对象,说明RunLoop和线程是一一对应的)、currentMode(当前所处的运行模式)、modes(多个运行模式的集合)、commonModes(模式名称字符串集合)、commonModelItems...需要手动唤醒线程,将当前线程从内核态切换到用户态 source1: 基于port的,包含一个 mach_port 和一个回调,可监听系统端口和通过内核和其他线程发送的消息,能主动唤醒RunLoop,接收分发系统事件...监听所有状态 6、各数据结构之间的联系 线程和RunLoop一一对应, RunLoop和Mode是一对多的,Mode和source、timer、observer也是一对多的 三、RunLoop的Mode...即基于port的source1,监听端口,端口有消息就会触发回调;而source0,要手动标记为待处理和手动唤醒RunLoop Mach消息发送机制 大致逻辑为: 1、通知观察者 RunLoop 即将启动...由kCFRunLoopDefaultMode切换到UITrackingRunLoopMode下,也不会影响接收Timer事件 六、RunLoop和线程 线程和RunLoop是一一对应的,其映射关系是保存在一个全局的

    1K20

    iOS中RunLoop机制浅探 原

    iOS中RunLoop机制浅探 一、浅识RunLoop         RunLoop这个家伙在iOS开发中,我们一直在用,却从未注意过他,甚至都不从见过他的面孔,那个这个神秘的家伙究竟是做什么的?...现在我们可以理解了,这样一个管理线程执行任务的机制就是RunLoop机制,线程在执行中的休眠与激活就是由RunLoop对象进行管理的。...这里有一点需要我们注意,官方文档上描述,虽然每一个线程中都可以获取RunLoop对象,但是并不是每一个线程中都有这个实例对象,我们可以这样理解:如果我们不获取runloop,这个runloop就不存在,...我们这里只来讨论NSRunLoop的属性和方法: + (NSRunLoop *)currentRunLoop; 获取当前线程的RunLoop:有则获取,无则创建 + (NSRunLoop *)mainRunLoop...2、当你在线程中使用如下方法时         某些延时函数和选择器在分线程中的使用,我们也必须手动开启runloop,这些方法如下: @interface NSObject (NSDelayedPerforming

    51730

    RunLoop在iOS开发中的应用

    概要 RunLoop在iOS开发中的应用范围并没有像runtime 那样广泛,我们通过CFRuntime的源代码可知runloop跟线程的是密不可分的,一个线程一定会创建一个对应的runloop,只是主线程创建就自动...此外,runloop并不是一个简单的do-while,作为OSX/iOS系统中Event Loop表现,runloop需要处理消息事件,在没有消息的时候休眠,有消息事件的时候立刻唤醒。   ...api文档中提到:如果没有输入源和定时源加入到runloop中,runloop就马上退出,否则通过频繁调用-runMode:beforeDate:方法来让runloop运行在NSDefaultRunLoopMode...所有的关于这个的都会拿AF2.X的代码说明这个常驻的案例,如果同学开发iOS稍微有点年长的话或者古董代码的都会用到网络第三方库ASIHTTPRequest,也用到利用CFRunLoopAddSource...while self.isCancelled == false { self.isMainThreadBlock = true DispatchQueue.main.async

    2.4K20

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

    RunLoop概念 RunLoop的数据结构 RunLoop的Mode RunLoop的实现机制 RunLoop与NSTimer RunLoop和线程 ---- 一、RunLoop概念 RunLoop...需要手动唤醒线程,将当前线程从内核态切换到用户态 source1: 基于port的,包含一个 mach_port 和一个回调,可监听系统端口和通过内核和其他线程发送的消息,能主动唤醒RunLoop,...监听所有状态 6、各数据结构之间的联系 线程和RunLoop一一对应, RunLoop和Mode是一对多的,Mode和source、timer、observer也是一对多的 三、RunLoop的Mode...即基于port的source1,监听端口,端口有消息就会触发回调;而source0,要手动标记为待处理和手动唤醒RunLoop Mach消息发送机制 大致逻辑为: 1、通知观察者 RunLoop 即将启动...由kCFRunLoopDefaultMode切换到UITrackingRunLoopMode下,也不会影响接收Timer事件 六、RunLoop和线程 线程和RunLoop是一一对应的,其映射关系是保存在一个全局的

    83140

    iOS-RunLoop充满灵性的死循环

    当没有事件消息传入的时候,RunLoop就休息了。这里只是简单的理解一下这张图,接下来我们来了解RunLoop对象和其一些相关类,来更深入的理解RunLoop运行流程。 三....RunLoop在哪里开启 我们知道主线程一开起来,就会跑一个和主线程对应的RunLoop,那么RunLoop一定是在程序的入口main函数中开启。...RunLoop和线程间的关系 每条线程都有唯一的一个与之对应的RunLoop对象 主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建 RunLoop在第一次获取时创建,在线程结束时销毁...RunLoop相关类 Core Foundation中关于RunLoop的5个类 CFRunLoopRef - 获得当前RunLoop和主RunLoop CFRunLoopModeRef RunLoop...CF的内存管理(Core Foundation) 凡是带有Create、Copy、Retain等字眼的函数,创建出来的对象,都需要在最后做一次release GCD本来在iOS6.0

    1.8K80

    iOS多线程——RunLoop与GCD、AutoreleasePool你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里

    你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429...iOS多线程——你要知道的NSThread都在这里 iOS多线程——你要知道的GCD都在这里 iOS多线程——你要知道的NSOperation都在这里 iOS多线程——你要知道的RunLoop都在这里...iOS多线程——RunLoop与GCD、AutoreleasePool RunLoop的执行者 __CFRunLoopRun源码解析 在前一篇文章中由于篇幅问题没有具体分析__CFRunLoopRun函数的源码...对象进入循环的事件,0xa0即kCFRunLoopBeforeWaiting | kCFRunLoopExit,监听RunLoop即将进入休眠和RunLoop对象退出循环的事件。...另一个监听器监听RunLoop对象进入休眠和退出循环的事件,回调函数同样是_wrapRunLoopWithAutoreleasePoolHandler,而优先级为2147483647即32位整数的最大值

    2.1K110
    领券