GCD && Run Loops学习笔记
1、GCD

使用不同优先级的若干个队列乍听起来非常直接,只是,我们强烈建议,在绝大多数情况下使用默认的优先级队列就能够了。假设运行的任务须要訪问一些共享的资源,那么在不同优先级的队列中调度这些任务非常快就会造成不可预期的行为。这样可能会引起程序的全然挂起,由于低优先级的任务堵塞了高优先级任务,使它不能被运行。
2、Run Loops
实际上,Run loop并不像 GCD 或者操作队列那样是一种并发机制,由于它并不能并行运行任务。只是在主 dispatch/operation 队列中, run loop 将直接配合任务的运行,它提供了一种异步运行代码的机制。
Run loop 比起操作队列或者 GCD 来说easy使用得多,由于通过 run loop ,你不必处理并发中的复杂情况,就能异步地运行任务。
一个 run loop 总是绑定到某个特定的线程中。main run loop 是与主线程相关的,在每个 Cocoa 和 CocoaTouch 程序中,这个 main run loop 都扮演了一个核心角色,它负责处理 UI 事件、计时器,以及其他内核相关事件。不管你什么时候设置计时器、使用NSURLConnection 或者调用
performSelector:withObject:afterDelay:,事实上背后都是 run loop 在处理这些异步任务。
不管何时你使用 run loop 来运行一个方法的时候,都须要记住一点:run loop 能够运行在不同的模式中,每种模式都定义了一组事件,供 run loop 做出响应。这在相应 main run loop 中临时性的将某个任务优先运行这样的任务上是一种聪明的做法。
关于这点,在 iOS 中很典型的一个演示样例就是滚动。在进行滚动时,run loop 并非执行在默认模式中的,因此, run loop 此时并不会响应比方滚动前设置的计时器。一旦滚动停止了,run loop 会回到默认模式,并执行加入到队列中的相关事件。假设在滚动时,希望计时器能被触发,须要将其设为NSRunLoopCommonModes 的模式,并加入到
run loop 中。
主线程一般来说都已经配置好了 main run loop。然而其它线程默认情况下都没有设置 run loop。你也能够自行为其它线程设置 run loop ,可是一般来说我们非常少须要这么做。大多数时间使用 main run loop 会easy得多。假设你须要处理一些非常重的工作,可是又不想在主线程里做,你仍然能够在你的代码在 main run loop 中被调用后将工作分配给其它队列。
假设你真须要在别的线程中加入一个 run loop ,那么不要忘记在 run loop 中至少加入一个 input source 。假设 run loop 中没有设置好的 input source,那么每次执行这个 run loop ,它都会马上退出。
GCD && Run Loops学习笔记的更多相关文章
- RAC学习笔记
RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Numpy学习笔记(上篇)
目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
随机推荐
- SVN与eclipse整合和利用、SVN与Apache综合
SVN与eclipse综合 下载SVN插入(http://subclipse.tigris.org) http://subclipse.tigris.org/servlets/ProjectDocum ...
- 使用方便 正则表达式grep,sed,awk(一)
一些无稽之谈: 对于正则表达式,永远似了解不明白,看到一些代码,脚本定期,awk,sed.心里总有点虚.主要是记不住.平时又没怎么用,也就没总结了. 如今有空,决定总结一下,顺便克服一下看到shell ...
- height/innerHeight/outerHeight
<script> $(document).ready(function(){ alert("height:"+$("#div").height()) ...
- 模式识别 - libsvm该函数的调用方法 详细说明
libsvm该函数的调用方法 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM ...
- Docker container communication with ovs
2台宿主机,192.168.11153,192.168.1.154 安装OVS rpm -ivh openvswitch-2.4.0-1.x86_64.rpm #预先下载的 配置OVS 1. 按照上一 ...
- 微设计(www.weidesigner.com)介绍系列文章(三)
微设计(www.weidesigner.com)是一个专门针对微信公众账号提供营销推广服务而打造的第三方平台. 3.1 优惠券 优惠券是用于微信上与顾客互动的一种营销方式,不仅能够展现自己的产品,更能 ...
- Spark编译与部署
Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建 [注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.S ...
- Android采用Volley具体的例子展示完整的异步加载数据(一)
MainActivity例如下列: package cc.cn; import java.util.HashMap; import org.json.JSONObject; import androi ...
- 微软发布Win10开发者指南视频
假设你是一个开发者,推荐你看看微软今天推出了一系列视频,标题是Win10开发人员指南,总体长度6时,多达22章内容,介绍很广泛.其实,即使你是编程新手或仅有兴趣,也值得一看. 开发人员Jerry Ni ...
- ruby简单的基本 6
模 像类似的模块,那里 class method 和 instance method.module 没有new不能生成对象的例子其中 class method 所谓的模块在模块化的方法,它能够直接调用 ...