以下为主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 学习笔记的更多相关文章

  1. 我的runloop学习笔记

    前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...

  2. c++11 线程池学习笔记 (一) 任务队列

    学习内容来自一下地址 http://www.cnblogs.com/qicosmos/p/4772486.html github https://github.com/qicosmos/cosmos ...

  3. c++11 线程池学习笔记 (二) 线程池

    学习内容来自以下地址 http://www.cnblogs.com/qicosmos/p/4772486.html github https://github.com/qicosmos/cosmos ...

  4. Linux线程互斥学习笔记--详细分析

    一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...

  5. android中的线程池学习笔记

    阅读书籍: Android开发艺术探索 Android开发进阶从小工到专家 对线程池原理的简单理解: 创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理 ...

  6. Boost线程库学习笔记

    一.创建一个线程 创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针.并且这个函数无参数,并返回void类型. 当一个thre ...

  7. Java内存模型与线程_学习笔记

    深入理解java虚拟机: 1.java内存模型 java虚拟机规范中试图定义一种Java内存模型.Java Memory Model(JMM) 1.1 主内存与工作内存 java内存模型规定所有的变量 ...

  8. ucore lab4 内核线程管理 学习笔记

    越学越简单,真是越学越简单啊 看视频的时候着实被那复杂的函数调用图吓到了.看代码的时候发现条理还是很清晰的,远没有没想象的那么复杂. 这节创建了俩内核线程,然后运行第一个线程,再由第一个切换到第二个. ...

  9. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

随机推荐

  1. 20172328 2018-2019《Java软件结构与数据结构》第九周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第九周学习总结 概述 Generalization 本周学习了无向图.有向图.带权图.常用的图算法.图的实现策略. 教材学 ...

  2. 清除电脑缓存的bat文件

    电脑在使用了之后,会产生垃圾缓存,若不及时清理会降低电脑的运行速度. 1.步骤: 2.新建一个记事本文件,命名“系统清理”;(或其他名字) 3.原封不动复制下面的文字到该记事本中 @echo off ...

  3. javascript 时间函数整理

    对Javascript日期的部分函数做个小结: var myDate = new Date();//定义时间函数 myDate.getYear();  //获取当前年份(2位) myDate.getF ...

  4. VS2008,System.Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))

    在VS2008环境中编译调试运行不报错,但在发布的exe文件运行就报错 System.Runtime.InteropServices.COMException (0x800401F3): Invali ...

  5. 常用 jq 正则 包含手机正则,邮箱正则。。。

    常用 jq 正则规则 1.手机   /^1(3|4|5|7|8)\d{9}$/ 2.qq    /^[1-9][0-9]{5,10}$/ 3.邮箱  /^\w+((-\w+)|(\.\w+))*\@[ ...

  6. Nginx基本安装

    Windows安装Nginx 解压:nginx-windows 双击: nginx.exe 能看到nginx欢迎界面说明,nginx安装成功 演示下 nginx做静态服务器 启动Nginx C:\se ...

  7. 逆向工程-获得IPsearch的注册码

    1)运行软件点击File->register 2)随便输入用户名和密码 3)记录弹窗的的关键字 4)发送到PEID查壳 4.1)未找到加密的壳 4.2)发送到OD打开,在反汇编目录下右键菜单找到 ...

  8. eclipse spring-boot-mybatis 的记录

    例子来源: https://gitee.com/lfalex/spring-boot-example.git spring-boot-mybatis 例子使用 mysql5.1.46 版本; 环境:e ...

  9. CentOS7安装MySQL并允许远程登录

    下载 mysql 源安装包 $ curl -LO http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 安装 mys ...

  10. 基于hortonworks的大数据集群环境部署流水

    一.ambari及HDP安装文件下载地址: 1.系统 操作系统:CentOS7 2.软件 本次安装采用最新版本: ambari-2.7.0.0 hdp-3.0.0.0 详细信息及下载地址如下: Amb ...