热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SDWebImage第三方库学习

1、基本使用方法异步下载并缓存-(void)sd_setImageWithURL:(nullableNSURL*)urlNS_REFINED_FOR_SWIFT;使用占位图片&

1、基本使用方法

//异步下载并缓存
- (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
//使用占位图片,当下载完成后使用新下载的图片进行替换
- (void)sd_setImageWithURL:(nullable NSURL *)urlplaceholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT;
//参数options表示下载图片时使用的选项常量,下面还会一一列举
- (void)sd_setImageWithURL:(nullable NSURL *)urlplaceholderImage:(nullable UIImage *)placeholderoptions:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;
//操作完成后调用的块。其中typedef void(^SDExternalCompletionBlock)(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL);包含四个参数,cacheType表示图片是从网络下载或本地缓存的
- (void)sd_setImageWithURL:(nullable NSURL *)urlcompleted:(nullable SDExternalCompletionBlock)completedBlock;- (void)sd_setImageWithURL:(nullable NSURL *)urlplaceholderImage:(nullable UIImage *)placeholdercompleted:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT;- (void)sd_setImageWithURL:(nullable NSURL *)urlplaceholderImage:(nullable UIImage *)placeholderoptions:(SDWebImageOptions)optionscompleted:(nullable SDExternalCompletionBlock)completedBlock;
//@param progressBlock 表示在图片在下载时调用的块
- (void)sd_setImageWithURL:(nullable NSURL *)urlplaceholderImage:(nullable UIImage *)placeholderoptions:(SDWebImageOptions)optionsprogress:(nullable SDWebImageDownloaderProgressBlock)progressBlockcompleted:(nullable SDExternalCompletionBlock)completedBlock;- (void)sd_setImageWithPreviousCachedImageWithURL:(nullable NSURL *)urlplaceholderImage:(nullable UIImage *)placeholderoptions:(SDWebImageOptions)optionsprogress:(nullable SDWebImageDownloaderProgressBlock)progressBlockcompleted:(nullable SDExternalCompletionBlock)completedBlock __deprecated_msg("This method is misunderstanding and deprecated, consider using `SDWebImageQueryDiskSync` options with `sd_setImageWithURL:` instead");

2、 SDWebImageOptions 常量

typedef NS_OPTIONS(NSUInteger, SDWebImageOptions ) {SDWebImageRetryFailed &#61; 1 <<0,SDWebImageLowPriority &#61; 1 <<1,SDWebImageCacheMemoryOnly &#61; 1 <<2,SDWebImageProgressiveDownload &#61; 1 <<3,SDWebImageRefreshCached &#61; 1 <<4,SDWebImageContinueInBackground &#61; 1 <<5,SDWebImageHandleCOOKIEs &#61; 1 <<6,SDWebImageAllowInvalidSSLCertificates &#61; 1 <<7,SDWebImageHighPriority &#61; 1 <<8,SDWebImageDelayPlaceholder &#61; 1 <<9,SDWebImageTransformAnimatedImage &#61; 1 <<10,SDWebImageAvoidAutoSetImage &#61; 1 <<11,SDWebImageScaleDownLargeImages &#61; 1 <<12,
};

  • SDWebImageRetryFailed
    默认情况下&#xff0c;当一个url下载失败&#xff0c;会尝试重新下载&#xff0c;如果URL在黑名单中那么SDWebImage库不进行重试。这个标志使黑名单失效。

  • SDWebImageLowPriority
    默认情况下&#xff0c;在UI交互中开始图片下载&#xff0c;这个标志使这个特性失效&#xff0c;例如导致在UIScrollView减速中延迟下载。

  • SDWebImageCacheMemoryOnly
    此标志在下载完成后禁用磁盘上缓存&#xff0c;仅在内存中缓存。

  • SDWebImageProgressiveDownload
    这个标志表示可以逐步下载图片&#xff0c;在下载过程中&#xff0c;网页能够逐步的显示图片。默认情况下&#xff0c;图片只在下载完成后一次性显示。

  • SDWebImageRefreshCached
    虽然图片已经被缓存了&#xff0c;但是HTTP响应的缓存控制比较重要&#xff0c;如果需要则从远程地址刷新图片。硬盘缓存将用SDWebImage代替NSURLCache&#xff0c;会导致轻微的性能下降。这个项目帮助处理相同的请求URL而图片已经改变的情况&#xff0c;比如Facebook图形api的概要图片。如果一个缓存的图片被刷新&#xff0c;完成块会被缓存图片调用一次&#xff0c;再被最终的图片调用一次。

  • SDWebImageContinueInBackground
    在iOS 4&#43;&#xff0c;当app切换到后台继续下载图片。这是通过向系统请求额外的时间来完成&#xff0c;在后台情况下让请求完成。如果后台任务时间过期那么操作将会被取消。

  • SDWebImageHandleCOOKIEs
    通过设置NSMutableURLRequest来操作COOKIEs保存到NSHTTPCOOKIEStore。 HTTPShouldHandlerCOOKIEs &#61; YES。

  • SDWebImageAllowInvalidSSLCertificates
    允许使用不信任的SSL证书。测试目的是有效的。在生产环境被警告。

  • SDWebImageHighPriority
    默认情况下&#xff0c;图片在队列中排队下载。这个标志移动他们到前面的队列中。

  • SDWebImageDelayPlaceholder
    默认情况下&#xff0c;当图片在加载中默认图片被加载。这个标志将延迟默认图片的显示&#xff0c;直到图片完成加载。

  • SDWebImageTransformAnimatedImage
    我们通常在动画图片中不调用transformDownloadedImage代理&#xff0c;大部分的变形代码将损坏图片。使用这个标志在任何情况下变形图片。

  • SDWebImageAvoidAutoSetImage
    默认情况下&#xff0c;图片是在下载完成后加载到图片视图。但是在一些情况下&#xff0c;我们想要在设置图片之前进行图片处理&#xff08;比如&#xff0c;提供一个过滤或添加一个折叠动画&#xff09;。使用这个标志&#xff0c;如果你想在下载成功后在完成块中手动设置图片。

  • SDWebImageScaleDownLargeImages
    默认情况下&#xff0c;图片解码为原始的大小。在iOS&#xff0c;这个标志会把图片缩小到与设备的受限内容相兼容的大小。如果设置了SDWebImageProgressDownload标志&#xff0c;那么缩小被设置为无效。

3、主要管理类

SDImageCache 提供图片缓存
SDWebImageCoder 对网络中下载的图片进行解码操作
SDWebImageDownloader 异步下载图片

4、UIKit层和工具层

  在进行网络下载图片时都是通过UIImageView&#43;WebCache类中提供的基础方法&#xff0c;但是所有的最终走向UIView&#43;WebCache以下方法中:

- (void)sd_internalSetImageWithURL:(nullable NSURL *)urlplaceholderImage:(nullable UIImage *)placeholderoptions:(SDWebImageOptions)optionsoperationKey:(nullable NSString *)operationKeysetImageBlock:(nullable SDSetImageBlock)setImageBlockprogress:(nullable SDWebImageDownloaderProgressBlock)progressBlockcompleted:(nullable SDExternalCompletionBlock)completedBlock;

如果好奇UIImageView&#43;WebCache类中的方法还要走向上一层UIView&#43;WebCache类中&#xff0c;那是因为SDWebImage框架还支持对UIButton的图片下载。

  SDWebImageManager同时管理SDImageCache和SDWebImageDownloader两个类&#xff0c;在下载任务开始的时候&#xff0c;SDWebImageManager首先访问SDImageCache来查询是否存在缓存&#xff0c;如果有缓存&#xff0c;直接返回缓存的图片。如果没有缓存&#xff0c;就命令SDWebImageDownloader来下载图片&#xff0c;下载成功后&#xff0c;存入缓存。
下载方法只有一个 :
[SDWebImageManager.sharedManager loadImageWithURL:options:progress:completed:]
   loadImageWithURL 中 会有 [self.imageCache queryCacheOperationForKey] 的操作 查询是否有缓存图片(SDImageCache中是基于 NSCache来实现的 通过key(url)来获取 缓存) * 如果不存在缓存 就开启下载器 在错误url名单中添加当前的url 到 failedURLs 中, 如果标记失败后可以重新下载 就把这个失败的url 在 failedURLs中移除
  下载成功就进行缓存 : self.imageCache 调用 - (void)storeImage:(nullable UIImage*)image imageData:(nullable NSData*)imageData forKey:(nullable NSString*)key toDisk:(BOOL)toDisk completion:(nullable SDWebImageNoParamsBlock)completionBlock 

 

转:https://www.cnblogs.com/xjf125/p/10214337.html



推荐阅读
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 本文详细介绍了如何在Android 4.4及以上版本中配置WebView以实现内容的自动高度调整和屏幕适配,确保中文显示正常,并提供代码示例。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
author-avatar
泉州多棱汽车销售服务有限公司
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有