什么是GCD
Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。
除了代码的平行执行能力,GCD还提供高度集成的事件控制系统。可以设置句柄来响应文件描述符、mach ports(Mach port 用于 OS X上的进程间通讯)、进程、计时器、信号、用户生成事件。这些句柄通过GCD来并发执行。
GCD的API很大程度上基于block,当然,GCD也可以脱离block来使用,比如使用传统c机制提供函数指针和上下文指针。实践证明,当配合block使用时,GCD非常简单易用且能发挥其最大能力。
理解串行、并发及同步异步
串行和并发
串行和并发描述了任务之间执行的时机。任务如果是串行的,那么在同一时间只执行一个任务。并发的多个任务被执行的时候,可能是在同一时间。
同步和异步
同步和异步描述了一个函数相对于另一个函数何时执行完毕。同步的函数只有当它调用的任务执行完,才会返回。而异步函数,会立即返回。虽然它也命令任务执行完,但它并不等待任务执行完。如此,异步函数就不会阻塞当前线程。(这样说可能有些过于抽象了,个人理解的是,在同步的时候没有开启子线程的能力,而在异步的时候具备开启子线程的能力)。
队列
串行队列
1)使用dispatch_queue_create函数创建串行队列
dispatch_queue_t queue = dispatch_queue_create(“队列名”,NULL);
dispatch_queue_t queue = dispatch_queue_create(“队列名”,DISPATCH_QUEUE_SERIAL);
两者等效
2)使用主队列(在主队列中的任务,都会放到主线程中执行,它也是唯一一个允许更新UI的队列,所以要是开启子线程的时候要更新UI的情况下一定要用主队列进行更新)
dispatch_queue_t queue = dispatch_get_main_queue();
并发队列(GCD默认已经提供了全局的并发队列)
1)dispatch_queue_t queue = dispatch_get_global_queue(dispatch_queue_priority,unsigned long flags);
前一个参数是优先级,有以下几种:
DISPATCH_QUEUE_PRIORITY_HIGH 2//高
DISPATCH_QUEUE_PRIORITY_DEFAULT 0//默认
DISPATCH_QUEUE_PRIORITY_LOW (-2)//低
DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MN//后台
2)dispatch_queue_t queue = dispatch_queue_create(“队列名”,DISPATCH_QUEUE_CONCURRENT);
在开发中基本上就是通过dispatch_async和dispatch_sync 分别配合着上面的三种队列使用,但是更多的情况下基本上就是dispatch_async和全局队列配合使用,并用主线程中更新UI。
本文向大家介绍谈谈你对闭包的理解?相关面试题,主要包含被问及谈谈你对闭包的理解?时的应答技巧和注意事项,需要的朋友参考一下 说明: bar在foo函数的代码块中定义。我们称bar是foo的内部函数。 在bar的局部作用域中可以直接访问foo局部作用域中定义的m、n变量。 简单的说,这种内部函数可以使用外部函数变量的行为,就叫闭包。 闭包的意义与应用
本文向大家介绍请谈谈你对JVM的理解?相关面试题,主要包含被问及请谈谈你对JVM的理解?时的应答技巧和注意事项,需要的朋友参考一下 Java虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。 什么是字节码?采用字节码的好处是什么? 在 Java 中,JVM可以理解的代码就叫做(
本文向大家介绍谈谈你对多态的理解?相关面试题,主要包含被问及谈谈你对多态的理解?时的应答技巧和注意事项,需要的朋友参考一下 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在程序运行期间才能决定。因为在程序运行时才确定具体的类,这样
本文向大家介绍谈谈你对面向对象的理解?相关面试题,主要包含被问及谈谈你对面向对象的理解?时的应答技巧和注意事项,需要的朋友参考一下 所谓对象就是由一组数据结构和处理它们的方法组成的,重点“数据”包括对象的特性、状态等的静态信息;“方法” 也就是行为,包括该对象的对数据的操作、功能等能动信息。把相同行为的对象归纳为类,类是一个抽象的概念,对象是类的具体。简单点说:对象就是类的实例。例如:小品演员就是
本文向大家介绍谈谈你对语义化的理解相关面试题,主要包含被问及谈谈你对语义化的理解时的应答技巧和注意事项,需要的朋友参考一下 HTML语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析; 在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的; 搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于SEO。 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
本文向大家介绍谈谈你对MySQL索引的理解?相关面试题,主要包含被问及谈谈你对MySQL索引的理解?时的应答技巧和注意事项,需要的朋友参考一下 MySQL索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。 MySQL的BTree索引使用的