首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
runloop专题
iOS——runLoop
什么是runloop RunLoop实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行相应的处理逻辑。线程执行了这个函数后,就会处于这个函数内部的循环中,直到循环结束,函数返回。 RunLoop是一种高级的循环机制,让程序持续运行,并处理程序中的各种事件,让线程在需要做事的时候忙起来,不需要的话就让线程休眠。 RunLoop和线程是绑定在一起的,每条线程都有
阅读更多...
iOS面试:runloop和线程有什么关系?
在 iOS 开发中,RunLoop 和线程密切相关。它们之间是如何交互的呢?我将从以下几个方面来解释它们的关系: 1. 什么是线程? 线程是程序执行的基本单位,是 CPU 调度的基本单位。每个线程都有自己的执行栈和程序计数器,并且线程共享进程的内存空间。iOS 中可以创建和管理多个线程,以便同时执行多个任务,提高应用的性能和响应能力。 2. 什么是 RunLoop? RunLoop 是一个
阅读更多...
iOS RunLoop
一:什么是Runloop Runloop,正如其名,loop表示某种循环,和run放在一起就表示一直在运行着的循环 二:Runloop的创建? iOS并没有提供Runloop的创建方法,因为创建了现场自然会有一个Runloop. 所以只有获取Runloop的方法: NSRunLoop * runloop = [NSRunLoop currentRunLoop]; //看源码,ru
阅读更多...
iOS Runloop面试题(利用 runloop 解释一下页面的渲染的过程?)
利用 runloop 解释一下页面的渲染的过程? 当我们调用 [UIView setNeedsDisplay] 时,这时会调用当前 View.layer 的 [view.layer setNeedsDisplay]方法。 这等于给当前的 layer 打上了一个脏标记,而此时并没有直接进行绘制工作。而是会到当前的 Runloop 即将休眠,也就是 beforeWaiting 时才会进行绘制工作。
阅读更多...
iOS Runloop面试题(什么是异步绘制?)
什么是异步绘制? 异步绘制,就是可以在子线程把需要绘制的图形,提前在子线程处理好。将准备好的图像数据直接返给主线程使用,这样可以降低主线程的压力。 异步绘制的过程 要通过系统的 [view.delegate displayLayer:] 这个入口来实现异步绘制。 代理负责生成对应的 Bitmap设置该 Bitmap 为 layer.contents 属性的值。
阅读更多...
iOS Runloop面试题(解释一下 手势识别 的过程?)
解释一下 手势识别 的过程? 当上面的 _UIApplicationHandleEventQueue()识别了一个手势时,其首先会调用 Cancel 将当前的 touchesBegin/Move/End 系列回调打断。随后系统将对应的 UIGestureRecognizer 标记为待处理。 苹果注册了一个 Observer 监测 BeforeWaiting (Loop即将进入休眠) 事件,这个
阅读更多...
iOS Runloop面试题(解释一下 `事件响应` 的过程?)
解释一下 事件响应 的过程? 苹果注册了一个 Source1 (基于 mach port 的) 用来接收系统事件,其回调函数为 __IOHIDEventSystemClientQueueCallback()。 当一个硬件事件(触摸/锁屏/摇晃等)发生后,首先由 IOKit.framework 生成一个 IOHIDEvent 事件并由 SpringBoard 接收。这个过程的详细情况可以参考这里
阅读更多...
iOS Runloop面试题(解释一下 NSTimer。)
解释一下 NSTimer。 NSTimer 其实就是 CFRunLoopTimerRef,他们之间是 toll-free bridged 的。一个 NSTimer 注册到 RunLoop后,RunLoop 会为其重复的时间点注册好事件。例如 10:00, 10:10, 10:20 这几个时间点。RunLoop 为了节省资源,并不会在非常准确的时间点回调这个Timer。Timer 有个属性叫做 T
阅读更多...
iOS Runloop面试题(讲一下 Observer ?)
讲一下 Observer ? typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {kCFRunLoopEntry = (1UL << 0), // 即将进入LoopkCFRunLoopBeforeTimers = (1UL << 1), // 即将处理 TimerkCFRunLoopBeforeSources = (1UL
阅读更多...
iOS Runloop面试题(RunLoop与NSTimer)
RunLoop与NSTimer 一个比较常见的问题:滑动tableView时,定时器还会生效吗? 默认情况下RunLoop运行在kCFRunLoopDefaultMode下,而当滑动tableView时,RunLoop切换到UITrackingRunLoopMode,而Timer是在kCFRunLoopDefaultMode下的,就无法接受处理Timer的事件。 怎么去解决这个问题呢?把Time
阅读更多...
iOS Runloop面试题(RunLoop概念)
RunLoop概念 RunLoop是通过内部维护的事件循环(Event Loop)来对事件/消息进行管理的一个对象。 1、没有消息处理时,休眠已避免资源占用,由用户态切换到内核态(CPU-内核态和用户态) 2、有消息需要处理时,立刻被唤醒,由内核态切换到用户态 为什么main函数不会退出? int main(int argc, char * argv[]) {@autoreleasepoo
阅读更多...
runloop补充
做了一年多的IOS开发,对IOS和Objective-C深层次的了解还十分有限,大多还停留在会用API的级别,这是件挺可悲的事情。想学好一门语言还是需要深层次的了解它,这样才能在使用的时候得心应手,出现各种怪异的问题时不至于不知所措。废话少说,进入今天的正题。 不知道大家有没有想过这个问题,一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静止了一样,不会自发的有任何动作发生
阅读更多...
RunLoop基础概念
RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 目录 RunLoop 的概念 RunLoop 与线程的关系 RunLoop 对外的接口 RunL
阅读更多...
Runloop和autorelease
什么是NSAutoreleasePool?它的作用是什么?autorelease对象何时释放?与手动释放有什么区别?autorelease池的创建和释放时机是什么?如何手动创建和释放NSAutoreleasePool对象?autorelease池的作用域是什么?为什么需要控制作用域?autorelease池与内存管理有什么关联?autorelease池在多线程环境中如何使用?autorelease
阅读更多...
23、RunLoop学习
RunLoop学习 RunLoop的定义RunLoop的作用RunLoop与线程的关系为什么main函数可以保持一直运行不退出RunLoop主要接口RunLoop数据结构CFRunLoopCFRunLoopModeCFRunLoopSourceCFRunLoopTimerCFRunLoopObserver RunLoop事件循环的实现机制点击一个app图标打开app到app杀死,经历了哪些过
阅读更多...
iOS - Runloop在实际开发中的应用
文章目录 iOS - Runloop在实际开发中的应用1. 控制线程生命周期(线程保活)2. 解决NSTimer在滑动时停止工作的问题2.1. 案例2.2 解决 3. 监控应用卡顿4. 性能优化 iOS - Runloop在实际开发中的应用 1. 控制线程生命周期(线程保活) 如果需要经常在子程序执行任务,可能希望一个线程可以重复使用,避免每次都要创建、销毁带来不必要的开销
阅读更多...
iOS RunLoop 的个人理解
2017-5-17 周四 晴 作者:58婚恋技术部 一,RunLoop 部分 启动 run loop 只对程序的辅助线程有意义。一个 run loop 通常必须包含一个输 入源或定时器来监听事件,如果一个都没有 ,run loop 启动后立即退出。每个线程都有一个或多个 run loop, 主线程的 runloop 默认是打开的,而子线程的 runloop 则默认是关
阅读更多...
iOS - Runloop的运行逻辑
文章目录 iOS - Runloop的运行逻辑1. 苹果官方的Runloop执行图2. Mode里面的东西2.1 Source02.2 Source12.3 Timers2.4 Observers 3. 执行流程3.1 注意点 4. Runloop休眠 iOS - Runloop的运行逻辑 1. 苹果官方的Runloop执行图 2. Mode里面的东西 2.1 Sour
阅读更多...
RunLoop对象与线程
iOS中有2套API来访问和使用RunLoop 1.Foudation: NSRunLoop 2.Core Foudation:CFRunLoopRef NSRunLoop和CFRunLoopRef都代表着RunLoop对象 NSRunLoop是基于CFRunLoopRef的一层OC包装 CFRunLoopRef是开源的 https://opensource.apple.com/tar
阅读更多...
分析runtime runloop
obj_msgsend 动态解析 快速转发 慢速转发 黑魔法 tableview没数据时 添加一个view 字典转模型 obj_msgsend 模型转字典 class_propertyList property_getName 自定义KVO isa指针 NSKVONotifying_B
阅读更多...
RunLoop之线程保活
文章目录 为什么需要线程保活线程保活的操作关于run方法的疑问RunLoop的启动方法RunLoop的关闭方法线程保活的分析及代码留存的问题 参考文献 为什么需要线程保活 在iOS项目中,有时会有一些花费时间较长的操作阻塞主线程,我们通常为了防止界面卡顿,将其放入子线程中运行。根据线程知识,如果子线程执行完分配的任务后,就会自动销毁。 比如我们现在定义一个线程,改写它的deall
阅读更多...
RunLoop的应用和RunLoop的面试题
一:RunLoop的应用 #import "ViewController.h"@interface ViewController ()/** 注释 */@property (nonatomic, strong) NSThread *thread;@end@implementation ViewController/*** 1:用NSThread创建线程的时候,不要忘记调用st
阅读更多...
RunLoop总结:RunLoop基础知识
没有实际应用场景,很难理解一些抽象空洞的东西,所以前面几篇文章先介绍了RunLoop的几个使用场景。 另外AsyncDisplayKit中也有大量使用RunLoop的示例。 关于实际的使用RunLoop 的案例和使用场景就不总结了,今天总结一点RunLoop的基础知识和概念。 什么是RunLoop? 顾名思义,它就是一个运行循环。一个RunLoop 就是一个用于处理既定工作和接收到的外来事件
阅读更多...
RunLoop总结:RunLoop的应用场景(五)
今天要介绍的RunLoop应用场景感觉很酷炫,我们可能不常用到,但是对于做Crash 收集的 SDK可能会用得比较频繁吧。相比关于RunLoop 可以让应用起死回生,大家都听说过,可是怎么实现呢?今天我就来实际试验一下。 资料 sunnyxx线下分享RunLoop (这是一份关于线下分享与讨论RunLoop的视频,备用地址:https://pan.baidu.com/s/1pLm4Vf9)漫谈i
阅读更多...
RunLoop 总结:RunLoop的应用场景(二)
上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景。这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转。 参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看。我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料。 关于iOS 中的RunLoop资料非常的少,以下资料都
阅读更多...
RunLoop 总结:RunLoop的应用场景(一)
参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看。我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料。 关于iOS 中的RunLoop资料非常的少,以下这些资料都是非常好的。 CF框架源码(这是一份很重要的源码,可以看到CF框架的每一次迭代,我们可以下载最新的版本来分析,或与以下文章对比学习。目前最新的是CF-1153.18.tar
阅读更多...