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

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按钮,并添加点击动作。

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

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多线程:『

2K50

iOS开发-RunLoop

、Timer、Observer,那么就直接退出RunLoop RunLoop里面有两套api用来访问使用RunLoop 1、Foundation--NSRunLoop 2、Core Foundation...--- CFRunloopRef 二者异同点: NSRunLoopCFRunloopRef都代表RunLoop对象,NSRunLoop是对CFRunloopRef一层OC的封装 RunLoop与线程...NSDefaultRunLoopMode]; // 定时器会跑在标记为common modes的模式下 // 标记为common modes的模式:包含:UITrackingRunLoopModekCFRunLoopDefaultMode...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 通过内核其他线程通信

80910

iOS RunLoop的介绍

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

1.1K100

iOS学习——浅谈RunLoop

RunLoop的字面意思是运行循环、跑圈,一个App启动后能一直执行,就是因为启动后进入了一个循环,在这个循环中不断监听各种状态、手势动作,并做出相应的响应。...1 RunLoop基础 1.1 RunLoop的基本作用 保持程序的持续运行(ios程序为什么能一直活着不会死) 处理app中的各种事件(比如触摸事件、定时器事件【NSTimer】、selector事件...类型的值  b 这个默认启动的Runloop是跟主线程相关联的 1.3 RunLoop对象 在iOS开发中有两套api来访问Runloop foundation框架【NSRunloop】 core...foundation框架【CFRunloopRef】 NSRunLoopCFRunLoopRef都代表着RunLoop对象,它们是等价的,可以互相转换 NSRunLoop是基于CFRunLoopRef...的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API(Core Foundation层面) 1.4 RunLoop与线程 Runloop线程的关系: 一个

68921

iOS底层原理总结 - RunLoop

面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? Runloop线程的关系? timer 与 Runloop 的关系?...程序中添加每3秒响应一次的NSTimer,当拖动tableview时timer可能无法响应要怎么解决? Runloop 是怎么响应用户操作的, 具体流程是什么样的? 说说RunLoop的几种状态?...当没有事件消息传入的时候,RunLoop就休息了。这里只是简单的理解一下这张图,接下来我们来了解RunLoop对象其一些相关类,来更深入的理解RunLoop运行流程。 三....因此每一个应用必须要有一个runloop, 我们知道主线程一开起来,就会跑一个主线程对应的RunLoop,那么RunLoop一定是在程序的入口main函数中开启。...RunLoop线程间的关系 每条线程都有唯一的一个与之对应的RunLoop对象 RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value 主线程的RunLoop

1.4K70

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_autoreleasePoolPushobjc_autoreleasePoolPop两个函数 ?

76820

iOS面试题:RunLoop剖析

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

82020

iOSRunLoop机制浅探 原

iOSRunLoop机制浅探 一、浅识RunLoop         RunLoop这个家伙在iOS开发中,我们一直在用,却从未注意过他,甚至都不从见过他的面孔,那个这个神秘的家伙究竟是做什么的?...HELLO WORLD程序,打印出字符串后程序就结束了,那么,我们的app是如何实现如下这样的机制的呢:app从运行开始一直处于待命状态,接收到类似点击事件等用户交互后执行相应操作,完成后继续等待交互响应...我们这里只来讨论NSRunLoop的属性方法: + (NSRunLoop *)currentRunLoop; 获取当前线程的RunLoop:有则获取,无则创建 + (NSRunLoop *)mainRunLoop...- (void)acceptInputForMode:(NSString *)mode beforeDate:(NSDate *)limitDate; 在某个时间期限前接收响应 - (void)run;...2、当你在线程中使用如下方法时         某些延时函数选择器在分线程中的使用,我们也必须手动开启runloop,这些方法如下: @interface NSObject (NSDelayedPerforming

38930

iOS 小技能: Responder Chain(响应)【下篇】

引言 Responder Chain(响应)【上篇】 响应的事件传递过程 抽屉效果 在这里插入图片描述 I 完整的触摸过程 1.1 一次完整的触摸过程,会经历3个状态: 触摸开始:- (void...可能会经历):- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 4个触摸事件处理方法中,都有NSSet *touchesUIEvent...UITouch的个数可以判断出是单点触摸还是多点触 判断多少次点击:UITouch的属性@property(nonatomic,readonly) NSUInteger tapCount; 1.2 事件的产生传递...II 响应的事件传递过程 1).如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图 2).在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给...see also iOS 小技能:响应的事件传递过程、手势识别器的使用步骤、抽屉效果的实现https://kunnan.blog.csdn.net/article/details/74107917

89630

RunLoopiOS开发中的应用

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

1.8K20
领券