RunLoop

APP启动时运行main函数,main函数里面启动了RunLoop,然后这个RunLoop一直跑圈就像do····while(YES)死循环那样,程序一直保持运行状态,时刻准备处理App的各种事件(例如触摸事件、定时器事件、Selector事件)。一条线程对应一个RunLoop对象且生死同步。NSTimer的固定频率执行方法本质上就是定时输入事件到RunLoop,PerformSelector也是产生事件输入源输入到RunLoop之中。

main函数

访问RunLoop对象

  • Foundation框架NSRunLoop类(CFRunLoopRef的OC包装)
// 获得当前线程的RunLoop对象
[NSRunLoop currentRunLoop];

// 获得主线程的RunLoop对象
[NSRunLoop mainRunLoop]; 
  • Core Foundation框架CFRunLoopRef类
// 获得当前线程的RunLoop对象
CFRunLoopGetCurrent(); 

// 获得主线程的RunLoop对象
CFRunLoopGetMain(); 

RunLoop其他类

  • RunLoop的运行模式类:CFRunLoopModeRef
一个 RunLoop 包含若干个 Mode,每个Mode又包含若干个Source/Timer/Observer;
每次RunLoop启动时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode;
如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入;
这样做主要是为了分隔开不同组的Source/Timer/Observer,让其互不影响。

> 系统默认注册了5个Mode:
kCFRunLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行
UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView 追踪触摸滑动,保证界面滑动时不受其Mode影响
UIInitializationRunLoopMode: 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用
GSEventReceiveRunLoopMode: 接受系统事件的内部 Mode,通常用不到
kCFRunLoopCommonModes: 这是一个占位用的Mode,不是一种真正的Mode,只有把NSTimer的runloop model切换成这个模式才能够保证及时用户拖动TableView系统进入UITrackingRunLoopMode不被中断。
  • RunLoop的事件输入源类:CFRunLoopSourceRef
Port-Based             Sources
Custom Input           Sources
Cocoa Perform Selector Sources

Source0:非基于Port的
Source1:基于Port的
  • RunLoop的时间触发器类:CFRunLoopTimerRef
类似于NSTimer不断计时然后条件触发事件
  • RunLoop的观察者类:CFRunLoopObserverRef
监听RunLoop的状态改变

RunLoop处理逻辑

事件输入源
RunLoop处理逻辑
RunLoop时序
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • RunLoop 文章目录 RunLoop简介 1.1 什么是RunLoop? 1.2 RunLoop和线程 1.3...
    May_d8f1阅读 2,405评论 0 1
  • 本文首发于我的个人博客:「程序员充电站」[https://itcharge.cn]文章链接:「传送门」[https...
    ITCharge阅读 61,486评论 50 541
  • 文章目录RunLoop简介1.1 什么是RunLoop? 1.2 RunLoop和线程1.3 默认情况下主线程的R...
    lusen_b阅读 3,068评论 0 2
  • 1 RunLoop简介 神秘的RunLoop。一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静...
    Claire_wu阅读 5,739评论 3 30
  • 如果没有RunLoop main函数中的RunLoop 第14行代码的UIApplicationMain函数内部就...
    JonesCxy阅读 3,655评论 0 4

友情链接更多精彩内容