zoukankan      html  css  js  c++  java
  • 笔谈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 也写的特别好,跟上面所提到的三篇文章有点类似,至于有什么看点,根据我看帖的经验,对一个知识点看不同的人反复解析,收获的东西肯定深刻,所以这篇经典的文章不容错过,要好好看看。


  • 相关阅读:
    【转】全文检索引擎Sphinx配置文件详细介绍
    【转】构建不依赖于cookie的手机端用户登录机制
    Sphinx在window下的初步安装和配置
    Zend Framework 在.htaccess中修改RewriteRule实现url重写
    做后台的程序猿的一点心得
    [Leetcode 75] 96 Unique Binary Search Trees
    [Leetcode 74] 92 Restore IP Addresses
    [Leetcode 73] 92 Reverse Linked List II
    [Leetcode 72] 91 Decode Ways
    [Leetcode 71] 86 Partition List
  • 原文地址:https://www.cnblogs.com/sunminmin/p/4451856.html
Copyright © 2011-2022 走看看