主线程 RunLoop 学习笔记
以下为主RunLoop 的输出,能够看到不同的source0,source1,observer
----------------------------------
CFRunLoop{wakeup port =, stopped = false, ignoreWakeUps = false,
current mode = kCFRunLoopDefaultMode,
common modes
{
<CFString 0x108f42000 [0x107bd39b0]>{contents = "UITrackingRunLoopMode"}
<CFString 0x107ba9800 [0x107bd39b0]>{contents = "kCFRunLoopDefaultMode"}
}
common mode items
(
<CFRunLoopSource>{callout = PurpleEventSignalCallback}}
<CFRunLoopObserver>{callout = _wrapRunLoopWithAutoreleasePoolHandler}
<CFRunLoopSource>{callout = FBSSerialQueueRunLoopSourceHandler}}
<CFRunLoopObserver>{callout = _beforeCACommitHandler}
<CFRunLoopSource>{callout = __handleHIDEventFetcherDrain}}
<CFRunLoopObserver>{callout = _wrapRunLoopWithAutoreleasePoolHandler}
<CFRunLoopObserver>{callout = _afterCACommitHandler}
<CFRunLoopObserver>{callout = _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv}
<CFRunLoopSource>{callout = __handleEventQueue}
<CFRunLoopObserver>{callout = _UIGestureRecognizerUpdateObserver}
<CFRunLoopSource>{<CFRunLoopSource MIG Server> {port = 17927, subsystem = 0x108ef9998, context = 0x0}}
<CFRunLoopSource>{callout = PurpleEventCallback}}
<CFRunLoopSource>{callout = _ZL27change_notify_port_callbackP12__CFMachPortPvlS1_}
<CFRunLoopTimer>{callout = _ZN2CAL14timer_callbackEP16__CFRunLoopTimerPv}
<CFRunLoopSource>{<CFRunLoopSource MIG Server> {port = 22535, subsystem =, context =}}
<CFRunLoopSource>{<CFRunLoopSource MIG Server> {port = 40455, subsystem =, context =}}
)
1) <CFRunLoopMode>{name = UITrackingRunLoopMode, port set = 0x1e07, queue =, source =, timer port = 0x2003}
sources0
(
<CFRunLoopSource>{callout = PurpleEventSignalCallback}
<CFRunLoopSource>{callout = __handleEventQueue}
<CFRunLoopSource>{callout = __handleHIDEventFetcherDrain}
<CFRunLoopSource>{callout = FBSSerialQueueRunLoopSourceHandler}
)
sources1
(
<CFRunLoopSource>{<CFRunLoopSource MIG Server>}
<CFRunLoopSource>{CFMachPort{callout = _ZL27change_notify_port_callbackP12__CFMachPortPvlS1_}}
<CFRunLoopSource>{<CFRunLoopSource MIG Server>}
<CFRunLoopSource>{<CFRunLoopSource MIG Server>}
<CFRunLoopSource>{callout = PurpleEventCallback}
)
observers
(
<CFRunLoopObserver>{activities = 0x1, repeats = Yes, callout = _wrapRunLoopWithAutoreleasePoolHandler}
<CFRunLoopObserver>{activities = 0x20, repeats = Yes, callout = _UIGestureRecognizerUpdateObserver}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _beforeCACommitHandler}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _afterCACommitHandler}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _wrapRunLoopWithAutoreleasePoolHandler}
)
timers
(
<CFRunLoopTimer>{callout = _ZN2CAL14timer_callbackEP16__CFRunLoopTimerPv},
)
2) <CFRunLoopMode>{name = GSEventReceiveRunLoopMode, port set = 0x2d03, queue =, source =, timer port = 0x5303}
sources0
(
<CFRunLoopSource>{callout = PurpleEventSignalCallback}
)
sources1
(
<CFRunLoopSource>{callout = PurpleEventCallback}
)
3) <CFRunLoopMode>{name = kCFRunLoopDefaultMode, port set = 0x1b03, queue =, source =, timer port = 0x2503}
sources0
(
<CFRunLoopSource>{callout = PurpleEventSignalCallback}
<CFRunLoopSource>{callout = __handleEventQueue}
<CFRunLoopSource>{callout = __handleHIDEventFetcherDrain}
<CFRunLoopSource>{callout = FBSSerialQueueRunLoopSourceHandler}
)
sources1
(
<CFRunLoopSource>{<CFRunLoopSource MIG Server> {port = 17927, subsystem =, context = 0x0}}
<CFRunLoopSource>{callout = _ZL27change_notify_port_callbackP12__CFMachPortPvlS1_}
<CFRunLoopSource>{<CFRunLoopSource MIG Server> {port = 22535, subsystem =, context =}}
<CFRunLoopSource>{<CFRunLoopSource MIG Server> {port = 40455, subsystem =, context =}}
<CFRunLoopSource>{callout = PurpleEventCallback}
)
observers
(
<CFRunLoopObserver>{activities = 0x1, repeats = Yes, callout = _wrapRunLoopWithAutoreleasePoolHandler}
<CFRunLoopObserver>{activities = 0x20, repeats = Yes, callout = _UIGestureRecognizerUpdateObserver}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _beforeCACommitHandler}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _afterCACommitHandler}
<CFRunLoopObserver>{activities = 0xa0, repeats = Yes, callout = _wrapRunLoopWithAutoreleasePoolHandler
)
timers
(
<CFRunLoopTimer>{callout = _ZN2CAL14timer_callbackEP16__CFRunLoopTimerPv}
)
4) <CFRunLoopMode]>{name = kCFRunLoopCommonModes, port set = 0x470f, queue =, source =, timer port = 0xa907}
观察者
typedef enum CFRunLoopActivity : CFOptionFlags {
kCFRunLoopEntry = (1UL << 0),
kCFRunLoopBeforeTimers = (1UL << 1),
kCFRunLoopBeforeSources = (1UL << 2),
kCFRunLoopBeforeWaiting = (1UL << 5),
kCFRunLoopAfterWaiting = (1UL << 6),
kCFRunLoopExit = (1UL << 7),
kCFRunLoopAllActivities = 0x0FFFFFFFU
} CFRunLoopActivity;
- <<<<<<主线程RunLoop 用到的 Activity>>>>>>
0x01 == 00000001 ===>>> kCFRunLoopEntry
0x20 == 00100000 ===>>> kCFRunLoopBeforeWaiting
0xa0 == 10100000 ===>>> kCFRunLoopBeforeWaiting | kCFRunLoopExit
- autorelease pool : _wrapRunLoopWithAutoreleasePoolHandler: 主消息循环在进入和等待或者退出注册了handler,来处理自动释放池
主线程 RunLoop 学习笔记的更多相关文章
- 我的runloop学习笔记
前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...
- c++11 线程池学习笔记 (一) 任务队列
学习内容来自一下地址 http://www.cnblogs.com/qicosmos/p/4772486.html github https://github.com/qicosmos/cosmos ...
- c++11 线程池学习笔记 (二) 线程池
学习内容来自以下地址 http://www.cnblogs.com/qicosmos/p/4772486.html github https://github.com/qicosmos/cosmos ...
- Linux线程互斥学习笔记--详细分析
一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...
- android中的线程池学习笔记
阅读书籍: Android开发艺术探索 Android开发进阶从小工到专家 对线程池原理的简单理解: 创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理 ...
- Boost线程库学习笔记
一.创建一个线程 创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针.并且这个函数无参数,并返回void类型. 当一个thre ...
- Java内存模型与线程_学习笔记
深入理解java虚拟机: 1.java内存模型 java虚拟机规范中试图定义一种Java内存模型.Java Memory Model(JMM) 1.1 主内存与工作内存 java内存模型规定所有的变量 ...
- ucore lab4 内核线程管理 学习笔记
越学越简单,真是越学越简单啊 看视频的时候着实被那复杂的函数调用图吓到了.看代码的时候发现条理还是很清晰的,远没有没想象的那么复杂. 这节创建了俩内核线程,然后运行第一个线程,再由第一个切换到第二个. ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
随机推荐
- POJ 1515 Street Directions (边双连通)
<题目链接> 题目大意: 有m条无向边,现在把一些边改成有向边,使得所有的点还可以互相到达.输出改变后的图的所有边(无向边当成双向的有向边输出). 解题分析: 因为修改边后,所有点仍然需要 ...
- Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计
RESTful 不是新东西,简单理解它的核心思想就是最大程度的利用http协议的一些特点,比如uri,比如请求动词,在前后端分离的项目中会有大大的好处 ,好的设计的url简单明了,胜过详细的说明文档. ...
- JZOJ5431 捕老鼠
JZOJ 5341 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕老鼠. 猫虽然擅长捕老鼠,但是老鼠们太健美了 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习7
#include <iostream>#include <cstring>const MAXSIZE=100;using namespace std;int main (){ ...
- ECMA Script 6_简单介绍
ECMAScript 6 ECMA 组织 前身是 欧洲计算机制造商协会 指定和发布脚本语言规范,标准在每年的 6 月份正式发布一次,作为当年的正式版本 这样一来,就不需要以前的版本号了,只要用年份标记 ...
- 使用 JProbe 调试 Linux 内核(转)
https://liam.page/2018/04/28/debug-in-Linux-kernel-jprobe/
- Python全栈-magedu-2018-笔记9
第三章 - Python 内置数据结构 封装和解构 封装 将多个值使用逗号分割,组合在一起 本质上,返回一个元组,只是省掉了小括号 python特有语法,被很多语言学习和借鉴 t1 = (1,2 ...
- 简单数据库开发之dao层开发
数据库 dao层是用来与底层数据库连接的一系列代码,它因上层service层调用而调用底层数据库,因为一般的数据库不会只存在一到几张表格,所以必须定义出dao层的接口协议,方便各种表格的操作. dao ...
- 被sleep开了个小玩笑
本案例转载自李大玉老师分享 Ⅰ.问题背景 探活脚本连续8次探测,判断主库异常,触发切换(判断备机是否有延迟,kill原主,VIP飘到备机,设置新主可写) 切换后,业务还是异常,SQL查询没返回,DB连 ...
- 2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析 实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间 ...