前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RunLoop与线程的关系是非常“狗血的”,你知道么?

RunLoop与线程的关系是非常“狗血的”,你知道么?

作者头像
CC老师
发布2019-01-23 17:20:51
1.5K0
发布2019-01-23 17:20:51
举报
文章被收录于专栏:HelloCode开发者学习平台

RunLoop与线程的关系,是非常“狗血”的。

没有RunLoop, 线程可能会"死"; 线程“死”了,RunLoop会停止运行。

开个玩笑,回到正题,它们之间的关系如下:

  • 线程与RunLoop是一一对应的
  • 线程如果没有开启RunLoop, 任务执行完就会结束
  • 线程销毁了,RunLoop也会在线程结束时停止运行

有兴趣了解RunLoop与线程哪些事么?让我们来一起揭秘!!

线程与RunLoop都是比较抽象的,幸好的是iOS给我们提供了2套API的访问框架:

  • Foundation : NSRunLoop
  • CoreFoundation : CFRunLoopRef (开源的)

想要了解RunLoop, 看源码是避免不了的....

一、线程与RunLoop是一一对应的

导入RunLoop相关源码, 这么阅读起来会方便些..

API接口是给我们直接创建RunLoop的接口,但是提供了获取RunLoop的接口

继续,跳转至源码查看,发现RunLoop没有获取到话,都会调用__CFRunLoopGet0, 并把线程作为参数传递.... (发现与线程扯上关系了...)

继续,跳转至__CFRunLoopGet0,源码代码被我简化了,如下:

到此,发现了线程与RunLoop的关系了么?

RunLoop与线程的关系是一对一的,并且用了个全局字典保存了起来!!

二、线程如果没有开启RunLoop, 任务执行完就会结束

线程里如果没有开启RunLoop

线程里如果开启了RunLoop

三、线程销毁了,RunLoop也会在线程结束时停止运行

线程没销毁,计时器正常的定时打印,RunLoop也是在正常运转

线程销毁了,计时器停止了,RunLoop也停止运行了

这是RunLoop系列的第二篇文章,下篇会继续探究RunLoop, 敬请期待...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HelloCode开发者学习平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档