iOS学习笔记【三】——RunLoop
只做简单笔记📝 详细请戳标题链接🔗
key point:一个RunLoop对象,这个对象在循环中用来处理程序运行过程中出现的各种事件,从而保持程序的持续运行。在没有事件处理的时候,会使线程进入睡眠模式,从而节省 CPU 资源,提高程序性能。主要包含了一个线程,若干个Mode,若干个commonMode,还有一个当前运行的Mode。
struct __CFRunLoop {
CFRuntimeBase _base;
pthread_mutex_t _lock; /* locked for accessing mode list */
__CFPort _wakeUpPort; // used for CFRunLoopWakeUp 内核向该端口发送消息可以唤醒runloop
Boolean _unused;
volatile _per_run_data *_perRunData; // reset for runs of the run loop
pthread_t _pthread; //RunLoop对应的线程
uint32_t _winthread;
CFMutableSetRef _commonModes; //存储的是字符串,记录所有标记为common的mode
CFMutableSetRef _commonModeItems;//存储所有commonMode的item(source、timer、observer)
CFRunLoopModeRef _currentMode; //当前运行的mode
CFMutableSetRef _modes; //存储的是CFRunLoopModeRef
struct _block_item *_blocks_head;//doblocks的时候用到
struct _block_item *_blocks_tail;
CFTypeRef _counterpart;
};
RunLoop与线程
- Runloop 和线程一一对应,RunLoo