RunLoop理解(二)数据结构

本文详细介绍了RunLoop的数据结构,包括CFRunLoopRef和CFRunLoopModeRef,强调了RunLoop模式的作用,如如何切换和隔离事件处理。同时,讨论了RunLoop的常见模式,如NSDefaultRunLoopMode和UITrackingRunLoopMode,以及它们对应用性能的影响。此外,还提到了事件源的分类(Source0和Source1)和定时器源(CFRunLoopTimerRef)以及观察者(CFRunLoopObserverRef)的功能和应用场景。
摘要由CSDN通过智能技术生成

CFRunLoopRef

RunLoopRef

RunLoop 对象的底层就是一个 CFRunLoopRef结构体,它里面存储着:

_pthread:RunLoop与线程是一一对应关系

_commonModes:存储着NSString对象的集合(Mode的名称)

_commonModelItems:存储着被标记为通用模式的Sourece0 / Source1 / Timer / Observer

_currentMode: RunLoop 当前的运行模式

_modes:存储着RunLoop所有的Mode(CFRunLoopModeRef)模式

// CFRunLoop.h
typedef struct __CFRunLoop * CFRunLoopRef;
// CFRunLoop.c
struct __CFRunLoop {
   
    pthread_t _pthread;  // 与线程一一对应
    CFMutableSetRef _commonModes;
    CFMutableSetRef _commonModeItems;
    CFRunLoopModeRef _currentMode;
    CFMutableSetRef _modes;
    ...
};

CFRunLoopModeRef

CFRunLoopModeRef 代表 RunLoop 的运行模式;

一个RunLoop包含若干个Mode,作为currentMode;

RunLoop启动时只能选择其中一个Model,作为currentModel;

如果需要切换Mode,只能退出当前Loop,再重新选择一个Mode进入,切换模式不会导致程序退出;

不同Model中的Source0 / Source1/ Timer / Observer 能分隔开来,互不影响;

如果Mode里没有任何Source0 / Source1 / Timer / Observer ,RunLoop会立马退出。

// CFRunLoop.h
typedef struct __CFRunLoopMode *CFRunLoopModeRef;
// CFRunLoop.c
struct __CFRunLoopMode {
   
    CFStringRef _name;             // mode 类型,如:NSDefaultRunLoopMode
    CFMutableSetRef _sources0;     // CFRunLoopSourceRef
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值