1.NSOperation的做用:ios
(1)是oc语言中基于GCD的面向对象的封装数组
(2)不用关心线程以及线程的生命周期缓存
NSOperation抽象类,经过子类 或者系统提供两个子类。安全
队列;一个操做只能被添加到一个队列网络
NSBlockOperation:建立一个操做;添加操做到队列(并发队列异步执行)并发
GCD是ios4.0推出的 主要针对多核cpu作了优化 是c语言的技术app
最大并发数:同时执行的任务数异步
暂停取消恢复:建立一个队列->懒加载(最大并发数)->for-in添加操做到队列->延时1秒->优化
暂停队列[self.queue setSuspended :YES]队列默认Suspended是no 暂停的是队列中尚未被运行的操做 正在运行的操做不能经过此方法暂停; 继续队列:[self.queue setSuspended :NO]; 取消队列:[self.queue cancelAllOperations]取消队列中没有被运行的操做 正在被运行的操做不能经过此方式取消 (当队列suspended == YES时 往队列中再添加操做 不运行)spa
拿到队列中的操做数:(self.queue.operationCount)
操做的优先级(服务质量): 优先级高的不必定先执行
队列的优先级:优先级高的不必定比优先级低的先运行,有更多的可能被cpu调度
操做依赖:addDependency 能够跨队列设置依赖关系 操做加入到队列以前设置 同步任务
图片下载: Model ->//字典转模型 //懒加载->ATS配置显示界面->图片->模拟网络慢->开启子线程->线程通讯->添加操做到队列
app出现的问题:(1)图片显示不出来 ( 由于没有frame) ;(2)当点击或者拖动界面 图片才出来: cell中的图片是懒加载;(3)设置占位图片:cell一开始建立的时候 就生成imageview的frame(4)自定义cell:每次滚动都下载图片浪费流量(5)内存缓存:保存图片到内存缓存 (6)当网速很慢的时候 来回滚动 一个图片开启多个下载操做 :建立可变数组用于记录执行下载操做 操做缓存 (7)操做缓存 内存不够用:清除内存缓存:清空操做缓存(8)沙盒缓存:存储图片到沙盒
UI线程不安全
Emily.Wang