2019独角兽企业重金招聘Python工程师标准>>>

1. synchronized

@synchronized(obj), obj指互斥信号量, 以同一个对象为参数(obj)的synchronized代码块不会同时执行.

2. 包含tableView的控制器push到新控制器

SDWebImage简单的demo中, 第一个控制器中包含一个tableView, 点击cell跳转到第二个详情控制器, 因为跳转到第二个控制器是非常频繁的操作, 所以这时候可以将详情控制器作为根控制器的一个属性.

**tip: **当一个子控制器打开频率非常频繁, 或者子控制器初始化过程比较复杂时候, 可以将自控制器作为父控制器组合的对象来持有, 一个简单的优化.

3. SDWebImage原理

  1. UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。
  2. SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是将UIImageView+WebCache同SDImageCache链接起来的类, SDImageCache: queryDiskCacheForKey:delegate:userInfo:用来从缓存根据CacheKey查找图片是否已经在缓存中
  3. 如果内存中已经有图片缓存, SDWebImageManager会回调SDImageCacheDelegate : imageCache:didFindImage:forKey:userInfo:
  4. 而 UIImageView+WebCache 则回调SDWebImageManagerDelegate: webImageManager:didFinishWithImage:来显示图片。
  5. 如果内存中没有图片缓存,那么生成 NSInvocationOperation 添加到队列,从硬盘查找图片是否已被下载缓存。
  6. 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate:。
  7. 如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:。进而回调展示图片。
  8. 如果从硬盘缓存目录读取不到图片,说明所有缓存都不存在该图片,需要下载图片,回调 imageCache:didNotFindImageForKey:userInfo:。
  9. 共享或重新生成一个下载器 SDWebImageDownloader 开始下载图片。
  10. 图片下载由 NSURLConnection 来做,实现相关 delegate 来判断图片下载中、下载完成和下载失败。
  11. connection:didReceiveData: 中利用 ImageIO 做了按图片下载进度加载效果。
  12. connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图片解码处理。
  13. 图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。
  14. 在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader。
  15. imageDownloader:didFinishWithImage: 回调给 SDWebImageManager 告知图片下载完成。
  16. 通知所有的 downloadDelegates 下载完成,回调给需要的地方展示图片。
  17. 将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。
  18. 写文件到硬盘在单独 NSInvocationOperation 中完成,避免拖慢主线程。
  19. 如果是在iOS上运行,SDImageCache 在初始化的时候会注册notification 到 UIApplicationDidReceiveMemoryWarningNotification 以及 UIApplicationWillTerminateNotification,在内存警告的时候清理内存图片缓存,应用结束的时候清理过期图片。
  20. SDWebImagePrefetcher 可以预先下载图片,方便后续使用。

转载于:https://my.oschina.net/whforever/blog/688815

第三方库之 - SDWebImage相关推荐

  1. SDWebImage第三方库加载图片生硬

    SDWebImage第三方库是一个非常不错的缓存图片的第三方库.大家都在用. 只是最近在用的时候发现使用中没有任何动效.加载中很生硬. 所以稍微改动这个方法 - (void)setImageWithU ...

  2. Swift项目引入第三方库的方法

     分类: iOS(55)  目录(?)[+] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swif ...

  3. xcode中用pods管理第三方库转

    安装pods :http://www.cnblogs.com/wangluochong/p/5567082.html 史上最详细的CocoaPods安装教程 --------------------- ...

  4. iOS开发之加速开发使用的28个第三方库、优秀第三方库集合

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之加速开发使用的28个第三方库.优秀第三方库集合 1: AFNetworking - 网络请求 AFNetworki ...

  5. 整理下开发中常用的第三方库

    在日常开发中,我们常常使用一些第三方库.我就在这整理下我常用的第三方库.这只是我常用的,使用习惯不一定和别人相同.但用于日常开发足够了. 1. AFNetworking 这是用于网络请求的库,使用方法 ...

  6. 现流行的第三方库及名称

    CocoaPods 是不是已经厌烦了将各种库拖拽到Xcode项目中?那么,CocoaPods的出现就帮你解决了这一问题.CocoaPods是Objective-C项目中最有名的类库管理工具,可以解决库 ...

  7. 个人常用iOS第三方库以及XCode插件介绍

    第三方库是现在的程序员离不开的东西,不光是APP开发,基本上所有的商业项目都会或多或少的使用到第三方库. Github上Star>100的开源库数量如下 可以看到JS以绝对的优势排名第一,一定程 ...

  8. iOS 常用第三方库及插件

    //菜单切换 https://github.com/pujiaxin33/JXCategoryView //各种导航栏样式 https://github.com/rickytan/RTRootNavi ...

  9. iOS第三方库汇总分享

    项目中常用第三方库收集 库名 用途 网络库 AFNetworking 网络请求库 SDWebImage 图片请求库 数据库 FMDB 基于SQLite数据库引擎 MagicalRecord 基于Cor ...

  10. iOS之常用第三方库的介绍

    因为iOS SDK相对比较底层,所以开发者就得受累多做一些体力活.不过幸运的是,有很多第三方的类库可以用来简化很多不必要的工作. (1)AFNetworking 目前比较推荐的iOS网络请求组件,默认 ...

最新文章

  1. java 获得当月天数_java中 如何获取当月的天数、指定日期的月份天数详解
  2. IT管理人员需要更加了解数据中心冷却情况
  3. 怎样才不浪费IP的价值?
  4. JavaScript案例三:动态显示时间
  5. eayUi panel实现上一页下一页
  6. 【时间序列】NeuralProphet:Prophet的Pytorch实现!精度更高 预测更快 特性更多!...
  7. java面试总结之一
  8. 阿里云免费申请免费SSL证书
  9. 知乎超高赞:见识多的人,平时都在看些什么?
  10. mysql 短时大连接的问题_mysql长连接和短连接的问题
  11. Meteor——以NodeJS为基础环境,MongoDB为数据环境的全栈开发平台!
  12. CCF认证-2014-12-2 Z字形扫描
  13. 【多线程】 Future Callable 使用(线程池线程执行完,执行主线程)
  14. 学校管理系统C#(数据库、源码、演讲内容、ppt等)
  15. mtk屏幕背光默认时间修改
  16. python读取excel合并单元_python 读写excel (合并单元格)
  17. UVALive - 5713
  18. Flash地址空间的数据读取
  19. 电脑视频加水印怎么加?
  20. 完备性的定义(ZZ)

热门文章

  1. 转载:ReferenceEquals, == , Equals 区别
  2. requests 获取百度推广信息
  3. 前端调用接口报错看不到报错响应时 console.dir
  4. Vue项目按需打包Lodash
  5. 转:MSSQL SERVER行转列 列转行
  6. java一个简单的管理系统
  7. 项目回顾-RecyclerView和CheckBox错乱问题
  8. include vector 编译出错VC++
  9. ADO.NET数据访问模式
  10. 远程桌面连接--“发生身份验证错误。要求的函数不受支持