关于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. redis之 主从复制和哨兵

    一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...

  2. python pycharm错误集锦

    url:http://www.cnblogs.com/hinimix/p/8016859.html 1, this list creation could be rewritten as a list ...

  3. openstack重设虚拟机实例密码

    目录结构: 引出 采用 nova get-password 方式 采用 libvirt-set-admin-password 采用 nova rebuild instance 的方式 采用 cloud ...

  4. JetBrainsIDEA-structure结构继承的图标说明

    图标3表示重写继承类中方法 图标2表示实现继承类抽象方法或接口中的方法 图标1表示未使用继承类中的方法 类中方法并非只统计显示继承类或实现接口中方法,而是对该类中所有方法进行分类,有可能某些方法是继承 ...

  5. QT中常用工具总结

    1.qmake 利用.pro文件生成Makefile 命令为: eg: qmake -o Makefile hello.pro 2. uic 利用ui界面审查.h头文件 命令为: eg: uic go ...

  6. 【翻译】Flink Table Api & SQL — 用户定义函数

    本文翻译自官网:User-defined Functions  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/tabl ...

  7. C++之future和promise

    future和promise的作用是在不同线程之间传递数据.使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问:而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要 ...

  8. Web服务器、应用程序服务器、web应用服务器、反向代理服务器

    参考链接:https://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575.html 首先我们来了解什么是服务器(server) 一般来说,serve ...

  9. 【Python学习之四】集合类型

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.字符串:字符串实际上就是字符的数组1.切片是指 ...

  10. FPGA的配置方式

    FPGA的配置方式 FPGA的配置方式有以下几种,JTAG,AS,PS,AP,FPP等几种. JTAG模式.JTAG模式下将.sof文件下载到FPGA内部的RAM内部进行运行,掉电程序丢失,主要用于前 ...