首先将SDWebImage导入项目
platform :ios, '8.0'
target ‘图片缓存练习’ do
pod 'SDWebImage'
end
//库名后不加版本,默认最新版本
流程
主要方法:
-
加载图片的几种方法
加载图片的方法在pods的UIImageView+WebCache
类中
说一下前几种
1.没有有占位图的加载方式
- (void)sd_setImageWithURL:(nullable NSURL *)url
2.有占位图的加载方式
////给一张默认图片,先使用默认图片,当图片加载完成后再替换,占位符的名字随你定
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder
3.没占位图的加载方式 并且实现回调Block完成下一步任务
- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock
4.使用可更换optionsType的加载方式
-(void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options
Options 枚举如下:
- SDWebImageRetryFailed 默认情况下,当URL无法下载时,URL就会被列入黑名单,这样库就不会继续尝试了。此标记禁用此黑名单。
- SDWebImageLowPriority 默认情况下,图像下载是在UI交互过程中启动的,这标志禁用该特性,导致在UIScrollView减速方面延迟下载。
- SDWebImageCacheMemoryOnly 此标记禁用磁盘缓存
- SDWebImageProgressiveDownload 此标志可以进行渐进式下载,在下载过程中,图像会逐步显示,就像浏览器所做的那样。默认情况下,图像只显示一次完全下载。
- SDWebImageRefreshCached 即使缓存了映像,也要尊重HTTP响应缓存控制,并在需要的情况下从远程位置刷新映像。磁盘缓存将由NSURLCache来处理,而不是使用SDWebImage,这会导致轻微的性能下降。这个选项有助于处理在同一个请求URL后面更改的图像,例如Facebook图形api概要图。如果刷新了缓存的图像,那么完成块就会被缓存的图像和最后的图像再次调用一次。只有当你不能用嵌入的缓存破坏参数使你的url静态时,才使用这个标志。
- SDWebImageContinueInBackground 在iOS 4+中,如果应用程序进入后台,可以继续下载图片。这是通过请求系统在后台获得额外的时间来完成请求完成的。如果后台任务过期,操作将被取消。
- SDWebImageHandleCookies 通过设置NSMutableURLRequest来处理存储在NSHTTPCookieStore中的cookie。HTTPShouldHandleCookies =是的;
- SDWebImageAllowInvalidSSLCertificates 启用不受信任的SSL证书。用于测试目的。在生产中使用谨慎。
- SDWebImageHighPriority 默认情况下,图像按顺序装载在队列中。这个标志把它们移到队列的前面。
- SDWebImageDelayPlaceholder 默认情况下,在图像加载时加载占位符图像。此标志将延迟加载占位符图像,直到图像完成加载。
- SDWebImageTransformAnimatedImage 我们通常不会在动画图像上调用transformdownloade昏暗委托方法,因为大多数转换代码会把它搞砸。无论如何,使用这个标志来转换它们。
- SDWebImageAvoidAutoSetImage 默认情况下,图像会在下载后添加到imageView中。但是在某些情况下,我们想要在设置图像之前有手(例如,应用一个过滤器或将它添加到交叉衰减动画中)使用这个标记如果你想在成功完成时手工设置图像
- SDWebImageScaleDownLargeImages 默认情况下,图像会被解码,以尊重它们原来的大小。在iOS上,这一标志将把图像缩小到与设备受限内存兼容的大小。*如果“SDWebImageProgressiveDownload”标志设置禁用缩减。
(以上均为复制粘贴)
图片缓存
-
获取
[SDImageCache sharedImageCache] getSize];
-
清理内存缓存
[[SDImageCache sharedImageCache] clearMemory];
-
清理磁盘缓存的接口
[[SDImageCache sharedImageCache] clearDisk];
-
异步将所有过期的缓存映像从磁盘中删除
[[SDImageCache sharedImageCache]deleteOldFiles];
-
Demo我加载图片只用了一种方式,你如果想练下其他的方式,就改下代码,都差不多,传的参数不同,图片URL我是盗用别人的,因为图片都是放在云服务器上的
注意:最重要的来了
- 如果请求是http而不是https,图片是加载不出来的
解决方法:在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES。