多线程 GCD和NSOperation
2016-09-08 10:14
120 查看
1.认识多线程 GCD和NSOperation
1.1谈一谈GCD和NSOperation的区别
首先二者都是多线程相关的概念,当然在使用中也是根据不同情境进行不同的选择;GCD是将任务添加到队列中(串行/并发/主队列),并且制定任务执行的函数(同步/异步),其性能最好,底层是C语言的API,也更轻量级.iOS4.0以后推出的,针对多核处理器的并发技术,只能设置某一个队列的优先级,其高级功能有一次性执行的dispatch_once,延迟操作dispatch_after,调度组等;
NSOperation把操作(异步)添加到队列中(全局的并发队列),是OC框架,更加面向对象,是对GCD的封装,iOS2.0推出GCD之后,对NSOperation的底层全部重写,可以随时取消已经设定准备要执行的任务,已经执行的除外,可以设置队列中每一个操作的优先级,其高级功能可以设置最大操作并发数,继续/暂停/全部 取消,可以给对垒设置操作的以来关系.
1.2谈谈多线程的应用
通常耗时的操作都放在子线程处理,然后主线程更新UI ,如我们要从数据库提取数据还是要将数据分组后显示,纳闷就会开个子线程来处理,处理完成后才去刷新UI显示.
拍照后,会在子线程处理图片,完成后才回到主线程来显示图片.拍照出来的图片太大了,因此要做处理.
音频,视频处理会放在子线程来操作
文件较大时,文件操作会在子线程中处理
做客户端与服务端数据同步时,会在后台闲时自动同步
2.线程之间是如何通信的
通过主线程和子线程切换的时候传递参数performSelecter:onThread:withObject:waitUntilDone:3.网络图片处理问题怎么解决图片重复下载问题?(SDWebImage大概实现原理)
这个就需要用到字典,以图片下载地址url为key,下载操作作为value,所有的图片大概分成三类:已经下载好的,正在下载的,和将要下载的;当一张图片将要进行下载操作的时候,先判断缓存中是否相同的图片,如果有的话返回这个图片,没有的话就根据url的md5值去沙盒中找,有的话就拿出来用,没有的话再去以图片的url为key去字典中找有没有正在进行的任务,左后去判断等待下载的操作任务里面的字典有没有相同的key,如果没有,就开启任务,记录一下,文件保存的名称是url的md5值
这里建立了两个字典:
1.iconCache:保存缓存的图片
2.blockOperation用来保存下载任务
每当进入或退出程序时,会进行图片文件的管理:超过一星期的文件就会别清除,如果设置了最大缓存,查过这个缓存就会删除最旧的文件,知道当前缓存文件为最大缓存文件的一半大小;
一般app中大部分缓存都是图片的情况下,可以直接调用clear方法进行清除缓存,getSize方法获取当前缓存大小.
4.多线程安全的几种解决方法
1.只有在主线程刷新访问UI2.如果要防止资源抢夺,要使用sunchronize进行加锁保护
3.如果是异步操作要保证线程安全等问题,尽量使用GCD(有些函数默认就是安全的)
4.单例为什么用static dispatch_once?
使用dispatch_once可以简化代码并彻底保证线程安全,开发者无需担心加锁或同步.此外,dispatch_once更高效,它没有使用重量级的同步机制,若是那样做的话,每次运行代码前都要获取锁.
相关文章推荐
- 多线程、特别是NSOperation 和 GCD 的内部原理
- 多线程之GCD、NSOperation、NSThread
- iOS开发 - 第03篇 - 多线程 - 02 - GCD & 单例 & NSOperation
- iOS之多线程开发(NSThread,NSOperation,GCD)
- IOS中的多线程实现:NSThread、GCD和NSOperation
- 多线程(NSThread、NSOperation、GCD)编程浅谈
- iOS多线程入门之NSThread,NSOperation,GCD
- iOS 多线程~NSThread、NSOperation 、GCD 技术区别
- NSOperation的多线程使用以及和GCD的对比
- IOS 多线程4种使用方法 :pThread,NSThread,GCD和NSOperation
- iOS开发之多线程——NSThread、NSOperation、GCD
- 多线程 NSThread,NSOperation,GCD
- [置顶] 阿里IOS面试题之多线程选用NSOperation or GCD
- ios多线程操作(九)—— 用NSOperation代替GCD
- iOS多线程之GCD-NSOperation对比总结
- IOS多线程之NSThread、NSOperation、GCD
- ios 多线程-GCD-NSOperation
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
- 多线程、特别是NSOperation 和 GCD 的内部原理
- [多线程]NSThread, NSOperation 和 GCD