笔谈runloop(一)
关于runloop熟悉而又陌生,熟悉的是在iOS开发的过程中线程的执行就跟runloop扯上关系了,陌生的是runloop到底是个什么东西。去公司面试的时候,很多公司的面试人员会问这个问题。runloop的机制到底是什么?接下来慢慢看咯。
我2012年11月开始从事 iOS客户端开发,当时在青岛一家公司,研究生还没有毕业。我2014年4月正式入职一家互联网工作,很多大公司在招聘的时候,是以实际毕业时间来算工作经验的,所以有的时候很亏啊。不扯这些了,要知道runloop是什么,那得知道它跟线程之间是个啥关系,可以看下文章iOS中多线程原理与runloop介绍 来了解二者之间的关系。这篇文章就是个启蒙,说的简单。整篇文章谈到了以下内容:
进程与线程之间的关系。系统中的每一个进程都有自己独立的虚拟内存空间,而同一个进程中的多个线程则共用进程的内存空间。每创建一个新的线程,都需要一些内存(如每个线程有自己的Stack空间)和消耗一定的CPU时间。另外当多个线程对同一个资源出现争夺的时候需要注意线程安全问题。进程的执行单元时线程,一个进程中至少有一个线程,进程中必然存在一个主线程,所以在操作子线程的时候,不能阻塞主线程。当我们从网络上获取图片加载到 UIImageView 中的时候,如果使用同步加载数据,这条线程就会阻塞主线程,出现界面卡住了,用户不能操作UI界面了,要等到数据加载完成用户才能操作界面,滑动、返回、点击等操作。所以,加载网络数据的时候都是采用异步的方式来加载的,为了不影响UI界面的刷新,UI界面的刷新是在主线程进行的。
iOS中创建线程的方式。创建线程的方式有:NSThread、NSObject、POSIX thread、NSOperation(NSOperation &&NSOperationQueue)、 GCD(Grand Central Dispatch)。
进程间通信。进程间通信根线程间的通信有很多地方是类似的。
runloop。runloop普遍被翻译成运行循环,就是个线程中的循环的概念。在RunLoop中,需要处理的事件分两类,一种是输入源,一种是定时器,定时器好理解就是那些需要定时执行的操作,输入源分三类:performSelector源,基于端口(Mach port)的源,以及自定义的源。编程的时候可以添加自己的源。RunLoop还有一个观察者Observer的概念,可以往RunLoop中加入自己的观察者以便监控着RunLoop的运行过程。每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。
iOS中多线程原理与runloop介绍 这篇文章需要仔细看下,结合自己写过的代码一想,哦呵,以前好多细节没有注意到,有的概念根本就不知道。遇到问题,网上代码一搜,解决问题了,就这样吧,没有认真去总结、去追踪根源,这种做法确确实实把自己推向了码农的坑中,永远就是个搬砖的。
编程是门技术活,除了专业知识要牢固,语言的运用能力也不能差,什么语言?英语。iOS 中的大部门东西是国外的人研究比较透,而且苹果的iOS开发文档也是英文的。对于我们要快速掌握一个知识点,国内人苦心翻译的文稿那绝对不能不看,看中文肯定快啊。所以关于iOS多线程中的runloop机制,三篇翻译文章不得不看 IOS 多线程 RUNLOOP 机制 (一) 、IOS 多线程 RUNLOOP 机制 (二)、IOS 多线程 RUNLOOP 机制 (三)
还有一篇文章 iOS多线程编程指南(三)Run Loop也写的特别好,跟上面所提到的三篇文章有点类似,至于有什么看点,根据我看帖的经验,对一个知识点看不同的人反复解析,收获的东西肯定深刻,所以这篇经典的文章不容错过,要好好看看。
笔谈runloop(一)的更多相关文章
- RunLoop 总结:RunLoop的应用场景(一)
参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...
- 我的runloop学习笔记
前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...
- [tableView reloadData] 和 runloop
需要[tableView reloadData]后需要立即获取tableview的cell.高度,或者需要滚动tableview,那么,直接在reloadData后执行代码是会有问题的. 断点调试感觉 ...
- RunLoop 总结:RunLoop的应用场景(二)
上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景.这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转. 参考资料 好的书籍都是值 ...
- iOS多线程-RunLoop简介
什么是RunLoop? 从字面上来看是运行循环的意思. 内部就是一个do{}while循环,在这个循环里内部不断的处理各种任务(比如:source/timer/Observer) RunLoop的存在 ...
- RunLoop(基本操作)
基本概念 -(void)runTimerInThread { //NSAutoreleasePool,没的用 [NSTimer scheduledTimerWithTimeInterval:1.0 t ...
- RunLoop
一.什么是RunLoop 从字面意思理解:运行循环.跑圈. 基本作用: 保持程序(应用)的持续运行. 处理程序(APP)中的各种事件(比如:触摸事件.定时事件.Selector事件等) 节省CPU资源 ...
- iOS RunLoop简介
一.什么是RunLoop? RunLoop是运行循环,每个Cocoa应用程序都由一个处于阻塞状态的do/while循环驱动,当有事件发生时,就把事件分派给合适的监听器,如此反复直到循环停止.处理分派的 ...
- 深入理解RunLoop
网上看的一篇文章,写的真好,我得多看几次好好理解理解 膜拜大神,转载至此便于学习查看. 此处标明原文链接:http://blog.ibireme.com/2015/05/18/runloop/ ...
随机推荐
- Java_jdbc 基础笔记之七 数据库连接(方法升级)
之前的更新方法 public static void update(String sql) { Connection conn = null; Statement statement = null; ...
- 自己搭建gitlab服务,组员不能上传代码
原因是因为 没有拉分支 直接在master 上开撸代码 ,master 分支 默认是受保护的,具体操作如下
- 网络公开课和MOOC资源
美国(USA) 1. 麻省理工学院开放课程(Free Online Course Materials/ MIT OpenCourseWare) 2. 耶鲁大学开放课程(Online Video Lec ...
- Python实例100个(基于最新Python3.7版本)
Python3 100例 原题地址: http://www.runoob.com/python/python-100-examples.html git地址: https://gith ...
- MySQL8新特性(1)--原子DDL
mysql 8支持原子ddl.一个原子DDL语句包含数据字典更新.存储引擎操作.二进制日志写,事务要么被提交,应用修改被持持久化到数据字典.存储引擎和二进制日志,或者被回滚. 原子ddl是随着mysq ...
- swoole流程图
程图,便于以后回忆下 总结几点如下: 首先主进程监听pipe_master事件, 子进程监听pipe_worker事件 通过主进程派生的线程 swReactorThread *thread = swS ...
- (转)nginx 安全配置文档
原文:https://www.cnblogs.com/heaven-xi/p/9961357.html#top 1.配置文档中有多处明确写出了nginx的配置文件路径,该路径是测试环境中的路径,线上系 ...
- vue前端项目中excel文件下载
模仿 https://github.com/PanJiaChen/vue-element-admin/ 的下载 创建文件夹vendor 创建文件 Export2Excel.js 内容: /* esli ...
- [LeetCode] 359. Logger Rate Limiter 记录速率限制器
Design a logger system that receive stream of messages along with its timestamps, each message shoul ...
- 【视频开发】【Live555】live555实现h264码流RTSP传输
1.概述 liveMedia 库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码. 其中的StreamFrame类文件(如MPEG4VideoStreamFramer)为流传输关键. ...