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学习笔记的更多相关文章

  1. RAC学习笔记

    RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...

  2. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  3. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  4. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  5. Numpy学习笔记(上篇)

    目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  7. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

  8. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  9. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

随机推荐

  1. 在SQL2008中,如何让id自动生成并自动递增?如何让时间默认生成?

    id自动递增:    如果是用语句操作,这样定义:ID INT IDENTITY,如果是要生成一对数字,这样定义:ID INT IDENTITY(1,1)    如果要在SQL Server的表中设置 ...

  2. POJ 3076 Sudoku DLX精确覆盖

    DLX精确覆盖模具称号..... Sudoku Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 4416   Accepte ...

  3. 2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)

    Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景.磁盘有 ...

  4. JNDI-j2ee

    Database Connection Pool (DBCP) Configurations The default database connection pool implementation i ...

  5. mapxtreme C# 完美车辆动态轨迹展示

    演示程序请在 http://pan.baidu.com/s/1jG9gKMM#dir/path=%2F%E4%BA%A7%E5%93%81%2FDemos 找 Trajectory.rar 轨迹回放功 ...

  6. UVA 1364 - Knights of the Round Table (获得双连接组件 + 二部图推理染色)

    尤其是不要谈了些什么,我想A这个问题! FML啊.....! 题意来自 kuangbin: 亚瑟王要在圆桌上召开骑士会议.为了不引发骑士之间的冲突. 而且可以让会议的议题有令人惬意的结果,每次开会前都 ...

  7. Linux Kernel系列 - 黄牛X内核代码凝视

    Hanks.Wang - 专注于操作系统与移动安全研究.Linux-Kernel/SELinux/SEAndroid/TrustZone/Encription/MDM    Mail - byhank ...

  8. 推荐系统相关算法:SVD

    假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分).那么能预测出Zero君对M的评分吗?答案显然是能.最简单的方法就是直接将预测分 ...

  9. enq: TX - row lock contention 参数P1,P2,P3说明

    enq: TX - row lock contention三个参数,例如,下面的等待事件 * P1 = name|mode          <<<<<<< ...

  10. Ruby: Count unique elements and their occurences in an array

    Is there a method in Ruby that takes an array, and counts all unique elements and their occurrences ...