目前有下面三种方式,这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的
1.NSThread
优点:NSThread 比其他两个轻量级
缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销
2.Cocoa NSOperation
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
Cocoa operation 相关的类是 NSOperation ,NSOperationQueue。NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行
3.GCD(Grand Central Dispatch)
是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。现在的iOS系统都升级到6了,所以不用担心该技术不能使用
GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行
dispatch queue分为下面三种:
Serial
又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。
Concurrent
又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。
Main dispatch queue
它是全局可用的serial queue,它是在应用程序主线程上执行任务的。
我们看看dispatch queue如何使用
常用的方法
dispatch_async
dispatch_group_async
dispatch_group_async可以实现监听一组任务是否完成
dispatch_barrier_async
dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行
dispatch_apply
执行某个代码片段N次。
The main queue: 与主线程功能相同。实际上,提交至main queue的任务会在主线程中执行。main queue可以调用dispatch_get_main_queue()来获得。因为main queue是与主线程相关的,所以这是一个串行队列。
Global queues: 全局队列是并发队列,并由整个进程共享。进程中存在三个全局队列:高、中(默认)、低三个优先级队列。可以调用dispatch_get_global_queue函数传入优先级来访问队列。
用户队列: 用户队列 (GCD并不这样称呼这种队列, 但是没有一个特定的名字来形容这种队列,所以我们称其为用户队列) 是用函数 dispatch_queue_create 创建的队列. 这些队列是串行的。正因为如此,它们可以用来完成同步机制, 有点像传统线程中的mutex。
分享到:
相关推荐
本资源“IOS应用源码——多线程.zip”包含了一个具体的iOS应用实例,用于展示如何在项目中实现多线程技术。通过分析这个源码,开发者可以深入理解多线程在iOS中的应用。 首先,我们要了解iOS中的多线程模型。iOS...
"IOS实例开发源码——多线程编程.zip"这个压缩包提供了一些关于iOS多线程编程的实际案例,特别关注了GCD(Grand Central Dispatch)这一现代多线程管理工具。 1. **GCD简介** GCD是Apple为解决多核处理器环境下的...
在iOS开发中,实现多线程的的方式有很多种,常用的有pthread、NSThread、GCD与NSOperation。在实际应用中,多线程技术也有着非常多的使用场景,比如异步的网络请求、异步的图片加载、后台执行复杂任务等等。 在iOS...
通过这个NSThread的示例,你可以学习到如何在iOS应用中创建、管理和同步线程,以及如何在多线程环境下处理UI和数据。这个源码可以帮助初学者深入理解iOS应用中的多线程概念,为实际项目开发打下坚实基础。在实践中,...
这是多线程编程的基本概念,你将看到如何使用GCD(Grand Central Dispatch)或NSOperationQueue来实现。 7. **图片缓存**:为了优化性能,项目可能使用了第三方库如SDWebImage或Kingfisher来缓存帖子中的图片,避免...
3. **FMDatabaseQueue**:线程安全的数据库操作队列,解决了多线程环境下并发访问数据库的问题。 #### FMDB基本操作 1. **初始化数据库**:使用`[[FMDatabase alloc] initWithPath:]`创建数据库实例,`-[FMDatabase...
【iOS应用源码——ThreadDemo】是一个用于学习和理解iOS多线程技术的示例项目。这个源码库,ThreadDemo,旨在帮助开发者深入理解如何在iOS应用中有效地使用线程,尤其是苹果的GCD(Grand Central Dispatch)和...
在iOS应用开发中,线程(Threading)是...总之,"IOS应用源码——Threading.rar"为iOS开发者提供了一套学习和实践多线程技术的资源,涵盖了从基础的线程模型到更高级的并发控制策略,是提升iOS开发技能的重要参考资料。
### iOS中多线程原理与runloop介绍 #### 一、线程概述 在iOS开发中,线程是构成程序的基本单位之一。一个程序至少包含一个线程——主线程(Main Thread),它负责应用程序的主要逻辑及用户界面的绘制。主线程在iOS...
### IOS 网络多线程详解 #### 一、多线程基本概念与用法 ...通过以上内容的学习,开发者可以更好地理解iOS中的多线程机制及网络通信的基础知识,并能运用这些知识来编写高效、稳定的iOS应用程序。
5. **线程同步**:在多线程环境中,确保UI更新的安全性。 6. **响应式设计**:适应不同设备尺寸和屏幕方向的界面设计。 7. **Swift/Objective-C编程**:项目可能采用这两种语言中的一种,是学习和提高编程技能的好...
这两份指南——《iOS并发编程指南》和《多线程编程指南》将深入讲解以上知识点,并通过实例帮助开发者更好地理解和运用到实际项目中。通过学习,开发者能够熟练掌握iOS平台上的并发编程技巧,提升应用的性能和用户...
- iOS中的多线程和异步编程,以保证应用的响应速度。 - 如何利用Core Data或SQLite进行数据持久化。 - 可能涉及的其他iOS技术,如Core Text(文本渲染)、Core Animation(动画效果)等。 总之,"IOS应用源码——...
在iOS开发领域,源码学习是提升技术深度的重要途径。本文将围绕标题“iOS应用源码——oalTouch.zip”展开,深入解析其中的关键知识点,旨在帮助开发者们理解并掌握iOS应用的内部运作机制。 oalTouch是一个基于...
该项目可能包含了各种iOS开发的技术元素,如UI设计、网络通信、数据存储、多线程处理等,为开发者提供了一个全面了解iOS应用开发的实例。 2. **源码结构分析** 在解压后的文件中,"Pegasus for iOS"项目通常会包含...
源码分析可以帮助开发者了解如何实现特定功能,如手势识别、内存管理、多线程以及性能优化。 文件“ssphotocropperviewcontroller.jpg”可能是一个截图或者示例图,展示了SSPhotoCropViewController的用户界面。在...
10. 性能优化:为了提供流畅的用户体验,可以考虑使用异步处理和多线程技术,避免阻塞主线程。 总之,这个“IOS应用源码——二维码扫描应用demo”涵盖了从初始化AVFoundation框架,设置输入输出设备,处理扫描事件...
此外,还可以了解到错误处理、多线程编程、动画实现、推送通知集成等高级主题。对于初学者,这是一个很好的实践学习材料;对于经验丰富的开发者,它可能提供了新的编程技巧或架构思路。总之,"T01"的源码包是一个...
9. **多线程与性能优化**: 在处理实时的远程桌面流时,多线程和性能优化是关键。源码可能包含对GCD (Grand Central Dispatch) 或其他并发机制的使用。 10. **调试与测试**: 源码中可能包含测试用例和调试代码,这...