关于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(一)的更多相关文章

  1. RunLoop 总结:RunLoop的应用场景(一)

    参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...

  2. 我的runloop学习笔记

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

  3. [tableView reloadData] 和 runloop

    需要[tableView reloadData]后需要立即获取tableview的cell.高度,或者需要滚动tableview,那么,直接在reloadData后执行代码是会有问题的. 断点调试感觉 ...

  4. RunLoop 总结:RunLoop的应用场景(二)

    上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景.这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转. 参考资料 好的书籍都是值 ...

  5. iOS多线程-RunLoop简介

    什么是RunLoop? 从字面上来看是运行循环的意思. 内部就是一个do{}while循环,在这个循环里内部不断的处理各种任务(比如:source/timer/Observer) RunLoop的存在 ...

  6. RunLoop(基本操作)

    基本概念 -(void)runTimerInThread { //NSAutoreleasePool,没的用 [NSTimer scheduledTimerWithTimeInterval:1.0 t ...

  7. RunLoop

    一.什么是RunLoop 从字面意思理解:运行循环.跑圈. 基本作用: 保持程序(应用)的持续运行. 处理程序(APP)中的各种事件(比如:触摸事件.定时事件.Selector事件等) 节省CPU资源 ...

  8. iOS RunLoop简介

    一.什么是RunLoop? RunLoop是运行循环,每个Cocoa应用程序都由一个处于阻塞状态的do/while循环驱动,当有事件发生时,就把事件分派给合适的监听器,如此反复直到循环停止.处理分派的 ...

  9. 深入理解RunLoop

    网上看的一篇文章,写的真好,我得多看几次好好理解理解 膜拜大神,转载至此便于学习查看. 此处标明原文链接:http://blog.ibireme.com/2015/05/18/runloop/    ...

随机推荐

  1. THOR: Tracking Holistic Object Representations

    THOR: Tracking Holistic Object Representations BMVC 2019 Oral 2019-08-04 10:30:09 Paper: https://arx ...

  2. Nginx系列 | [转]Nginx 上传文件:client_max_body_size 、client_body_buffer_size

    原文:http://php-note.com/article/detail/488 client_max_body_size client_max_body_size 默认 1M,表示 客户端请求服务 ...

  3. Typescript 开发环境的最佳实践

    Typescript 开发环境的最佳实践 0️⃣ git init(略) 1️⃣️️ 初始化:$ yarn add -D ts-node typescript 2️⃣ 生成 tsconfig.json ...

  4. Nginx location wildcard

    Module ngx_http_core_modulehttps://nginx.org/en/docs/http/ngx_http_core_module.html#location locatio ...

  5. 关于Objective-C新增的__kindof关键字

    Objective-C随着Xcode 7的升级带来了许多新特性,当然此次更新最最大的就是引入了Objective-C的轻量级泛型,确切地说是Objective-C类的轻量级泛型.除此之外,还有一个小特 ...

  6. how-does-mysql-replication-really-work/ what-causes-replication-lag

    https://www.cnblogs.com/kevingrace/p/6274073.html https://www.cnblogs.com/kevingrace/p/6261091.html ...

  7. bim模型中所有IfcWallStandardCase构件

    ifc中的IfcWallStandardCase构件 //执行吊装 void startHoisting() { osg::Vec3f vec3f1 = index_node1->getBoun ...

  8. Spring cloud微服务安全实战-7-10ELK日志采集架构优化

    ELK搭建起来.采集日志,展示.但是这个架构还有一些问题. 可用性的问题,springboot的应用,随着业务的增长会越来越多.logstash压力就会越来越大.大到一定的程度可能就会吧logstas ...

  9. elasticsearch 管理常用命令集合

    elasticsearch rest api遵循的格式为: curl -X<REST Verb> <Node>:<Port>/<Index>/<T ...

  10. Android Capabilities讲解

    1.Capabilities介绍 可以看下之前代码里面设置的capabilities DesiredCapabilities capabilities =newDesiredCapabilities( ...