SDWebImage 官方文档 翻译(v3.7.5 中文 简介,非API文档 )

2023-11-10

最近正在自学iOS,看到网上有项目用SDWebImage,便找来文档看看,顺便记录一下,也方便大家阅读(官方文档地址: http://cocoadocs.org/docsets/SDWebImage/3.7.5/ 以下是翻译内容)。
Web Image
SDWebImage提供了一个UIImageView的分类来支持获取远程图片。这个库提供了如下功能:
1. 提供UIImageView的一个分类用以支持对Cocoa Touch framework添加网络图片以及管理、缓存图片。
2. 支持异步图片下载
3. 支持内存+硬盘级的图片缓存,并且自动处理缓存过期情况
4. 支持GIF
5. 支持WebP 格式
6. 支持后台解码图片
7. 保证同一个URL的图片不会被多次重复下载
8. 保证不会多次尝试访问一个失效或者错误的URL
9. 保证主线程不会被卡住
10. 性能优秀
11. 使用GCD和ARC
12. 支持Arm64
注意:3.0版本的SDWebImage不能完全兼容2.0版本,并且3.0版本需要iOS版本5.1.1以上。如果你需要在iOS 5.0以下版本开发,请使用2.0版本的SDWebImage

在UITableview中使用UIImageView+WebCache分类
只需要导入UIImageView+WebCache.h头文件,然后在tableView:cellForRowAtIndexPath: 中调用sd_setImageWithURL:placeholder:方法,SDWebImage将会帮你处理下载和缓存的所有工作。

import <SDWebImage/UIImageView+WebCache.h>

...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:MyIdentifier] autorelease];
    }

    // Here we use the new provided sd_setImageWithURL: method to load the web image
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    cell.textLabel.text = @"My Text";
    return cell;
}

使用Blocks
你可以使用blocks来通知你的程序图片下载进度以及图片下载完成与否。这里我们使用sd_setImageWithURL:方法来加载网络图片

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]
                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
                                ... completion code here ...
                             }];

注意,如果在图片下载完成之前取消了图片下载,success或者failure block不会被调用

使用SDWebImageManager
SDWebImageManager是在UIImageView+WebCache分类背后实现很多功能的类,这个类会异步下载图片到缓存中。你可以直接使用这个类来缓存图片,而不用在UIView类中调用(照我的理解就是不用在初始化UI的时候下载图片,而是后台直接先把图片下载下来供以后使用)。下面举个栗子:

SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:imageURL
                      options:0
                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                         // progression tracking code
                     }
                     completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                         if (image) {
                             // do something with image
                         }
                     }];

单独使用异步图片下载器
单独调用异步图片下载器也是可以的,请看代码:

SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
[downloader downloadImageWithURL:imageURL
                         options:0
                        progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                            // progression tracking code
                        }
                       completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                            if (image && finished) {
                                // do something with image
                            }
                        }];

单独使用异步图片缓存
单独调用基于异步操作的图片缓存也是可以的。SDImageCache 类中维护着一个内存缓存和一个可选的硬盘缓存(也就是内存和外存)。硬盘缓存的写操作是异步的,不会对UI刷新增加不必要的延迟。
SDImageCache类提供一个单例,但是如果你想创建一个与默认实例不同名字空间的缓存,你也可以创建自己的实例。
你可以调用 queryDiskCacheForKey:done: 方法从缓存中寻找图片。如果该方法返回nil,说明要寻找的图片并没有缓存下来,那么你有必要自己调用方法来缓存它。缓存标识key是全局唯一的,通常来说默认是图片的绝对URL。

SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) {
    // image is not nil if image was found
}];

默认情况下,SDImageCache将会先在memory缓存中寻找图片,如果没找到,会去disk缓存中寻找。如果你只想在memory缓存中寻找,可以调用imageFromMemoryCacheForKey:方法。

要将图片添加到缓存里,你可以调用 storeImage:forKey: 方法

[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];

默认情况下,图片会同时被缓存到memory和disk缓存中(当然是异步的哈)。如果你只想缓存到memeory中,调用storeImage:forKey:toDisk: (原文为:use the alternative method storeImage:forKey:toDisk: with a negative third argument,是说第三个参数就填个无效的值?)

使用缓存key过滤器
有时候可能你不想用图片的URL作为缓存的key,因为有时候URL是动态的。SDWebImageManager提供一个方法来设置一个缓存key过滤器,这个过滤器接收NSURL作为输入,然后生成一个NSString的缓存key。
下面的栗子是在APPDelegate中设置了一个过滤器,这个过滤器会去除掉URL中的查询字符串(query-string,也就是URL问好后面的那段),然后将其作为缓存key

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
        url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
        return [url absoluteString];
    };

    // Your app init code...
    return YES;
}

常见问题
在UITableViewCell中使用动态图片尺寸
UITableView中的图片尺寸被cell中的第一个image set所决定。如果你的网络图片大小与placeholder图片的不一致,下面的链接可能帮到你:
http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/ (这个网站打不开啊。。)

处理图片刷新
SDWebImage默认情况下缓存图片非常快。它不鸟所有HTTP服务器返回来的缓存控制头,直接缓存图片。这暗示着图片的URLs是静态的,不会改变。如果URL指向的图片改变了,URL也应该跟着改变。
如果你不能控制图片服务器,当图片发生变化时,可能你就不能修改图片的URL。这种情况就像Facebook的avatar URLs。这种情况下,你可以使用SDWebImageRefresheCached标识。这会稍微减缓缓存性能,从而遵循HTTP返回的HTTP caching control headers

[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
                 placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
                          options:SDWebImageRefreshCached];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDWebImage 官方文档 翻译(v3.7.5 中文 简介,非API文档 ) 的相关文章

  • iOS 8 支持动态链接吗?

    直到 iOS7 之前 出于安全考虑 Apple 都不支持动态链接 开发人员之间的代码重用通常依赖于静态库 这些静态库是作为应用程序可执行文件的一部分构建的 在 iOS8 中引入扩展似乎稍微改变了这一点 因为扩展是单独的可执行文件 扩展及其包
  • 允许的 APNS 持续连接数量是多少?

    我正在尝试编写服务器端代码来为我的应用程序发送推送通知 根据 Apple 的建议 我计划保留连接并根据需要发送推送通知 Apple 还允许打开和保留多个并行连接以发送推送通知 您可以与同一网关或多个网关实例建立多个并行连接 为此 我想维护一
  • 如何在 iOS 中查找蓝牙音频设备

    好的 我正在开发一个有趣的项目 该项目有一个障碍 我需要为我的 iOS 应用程序启用蓝牙音频支持 我遇到的障碍是我什至无法开始获取已连接的蓝牙音频设备的列表 即使我的 iPhone 5S 可以识别我的耳机 大约 3 4 岁的耳机 LG HB
  • 从数组中获取随机字符串[重复]

    这个问题在这里已经有答案了 我试图从数组 firstArray 中获取随机字符串并将其打印在 UILabel label 中 我似乎无法弄清楚并且出现错误 感谢您的帮助 我尝试搜索但找不到任何最新的教程 方法 import UIKit cl
  • 如何建立辅助NSSortDescriptor排序键?

    我已成功按排序键对数据进行排序lastName 但我想知道如何排序lastName 然后由firstName 这是我用来排序的代码lastName NSSortDescriptor sortDescriptor NSSortDescript
  • UITableview 中的水平和垂直滚动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 I want to make a lineup for a festival You can see what I want to a
  • 将第 3 方库 ZXing 导入 Xcode

    我尝试了多种方法将第 3 方库 ZXing 导入我的 iOS 应用程序 但所有方法都很痛苦 或者根本不起作用 如果有人可以建议我做错了什么 或者提出导入 ZXing 等库的更好方法 我将非常感激 一定比这个容易 这就是我所做的 结果是 My
  • 如何在IOS中的UIStackView中设置权重

    UIStackView与安卓类似LinearLayout但我不知道如何设置子视图的权重 假设我有一个垂直的UIStackView and 3 UIImageView就在里面 我想连续设置权重3 6 1UIImageViews 我怎么做 UI
  • 修补应用内购买黑客;卡在第四步

    正如我们许多人所知 苹果最近出现了一种情况 黑客可以免费获得任何应用内购买 苹果最近发布了这个文件 http developer apple com library ios releasenotes StoreKit IAP Receipt
  • 从 UIImagePickerController 相机视图推送 viewController

    我正在开发一款消息应用程序 类似于 WhatsApp 用户可以互相发送文本和图像消息 当用户想要发送图像时 他可以从相机胶卷中选择一张图像 也可以用相机拍摄一张图像 这就是我介绍的方式UIImagePickerController对于这两种
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • 如何在 Firebase 控制台中使用 Apple 新的 APN .p8 证书

    随着最近 Apple 开发者帐户的升级 我面临着一个困难 在尝试创建推送通知证书时 它为我提供了 p8 证书 而不是可以导出到 p12 的 APNs 证书 Firebase 控制台仅接受 p12 证书 那么我如何从这些新的 p8 证书中获取
  • 模块未使用库演化支持进行编译;使用它意味着无法保证二进制兼容性

    最近我遇到了 SDK 的编译时警告 这是否意味着它不是使用目标设置 构建用于分发的库 构建的 你需要设置Build Libraries for Distribution在项目中Build Settings to No然后它就会消失
  • 如何在 iOS 9 上可靠地检测是否连接了外部键盘?

    在 iOS 9 之前 确定是否连接外部键盘的最可靠方法是监听UIKeyboardWillShowNotification并使文本字段成为第一响应者 如中所述这个问题 https stackoverflow com questions 289
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr

随机推荐

  • Android开发必须掌握!Kotlin可能带来的一个深坑,使用指南

    1 项目介绍 Flutter是目前比较流行的跨平台开发技术 凭借其出色的性能获得很多前端技术爱好者的关注 比如阿里闲鱼 美团 腾讯等大公司都有投入相关案例生产使用 基于Flutter Dart chewie photo view image
  • 聊一聊 Java 中的 ThreadLocal

    前言 本文首发于我的个人博客 http yifanstar top 提到 ThreadLocal Java 开发者并不陌生 在面试中 也经常被面试官提及 对 Java 开发者而言也是一个必须掌握的知识点 所以将它理解透彻是很有必要的 文章稍
  • linux下lpython查版本信息,ln进行python软连接、find、which进行环境变量文件查找、ps进行进程查看、/usr/local/为软件安装主目录-new

    1 查看某个安装包的版本信息指令 python m django version 如果是查看其它安装包的信息则改为其它包名即可 2 ln进行python版本软连接 安装python3 5推荐使用Anaconda 推荐安装到 usr loca
  • 推荐9个最顶级的IT公众号

    固步自封只会让自己落后于他人 如今 网络已将人与人之间的距离拉近 我们应开拓自己的眼界 结识更多的大能来丰富自己的知识 以下是8个技术公众号 每日共享最新的技术资讯 快收下这波安利吧 stormzhang stormzhang 大家都喊他张
  • Python pip install 安装包报错ERROR: Could not find a version that satisfies the requirement XXX解决方法

    Python pip install 安装包报错ERROR Could not find a version that satisfies the requirement XXX解决方法 文章目录 Python pip install 安装
  • 利用arp欺骗获取局域网目标浏览的图片

    之前的实验中实现了arp断网攻击 这是arp欺骗错误配置下产生的现象 所谓arp欺骗 就是在断网攻击的前提下 让流量转发出去 原理 使目标主机认为攻击者的网卡是网关 从而将数据包都发给攻击者的网卡 攻击者的网卡再开启转发 将数据包传到真正网
  • 毕业设计 单片机选题100例(五)

    单片机毕业设计项目分享系列 这里是DD学长 单片机毕业设计及享100例系列的第一篇 目的是分享高质量的毕设作品给大家 包含全面内容 源码 原理图 PCB 实物演示 论文 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的单片机项目缺少
  • 数据结构之优先级队列(堆)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 二叉树的顺序存储 1 存储方式 2 下标关系 二 堆 概念 创建大根堆 三 堆的应用及相关操作 入队列 出队列 得到队头元素 四 Java中的优先级队列 细节问
  • Shell编程:函数的简单应用

    Shell编程是一种在Unix或类Unix系统上进行脚本编程的方法 脚本是一系列命令的集合 用于自动化执行特定任务 在Shell脚本中 函数是一种组织和重用代码的重要方式 函数允许将一段代码片段封装起来 并在需要时进行调用 本文将介绍She
  • MySQL参数sql-mode配置

    一 问题描述 采用Navicat连接mysql 在执行SQL时报错 Err 1055 Expression 1 of ORDER BY clause is not in GROUP BY clause and contains nonagg
  • 贡献30本经典Linux学习和开发教程和资料,都是pdf完整版的

    贡献30本经典Linux学习和开发教程和资料 都是pdf完整版的 字号 订阅 完全免费下载 无需注册也无需积分 pdf版经典Linux学习教程资料列表 电子书 下载链接 单个资源下载 101 深入理解Linux内核 第三版 英文版 1030
  • pandas(一):read_csv解决第一列Unnamed问题

    先直接给答案 configdata pd read csv savepath encoding utf 8 index col 0 然后我们展开来说明 首先下面这个图片是原始csv数据 1 第一列问题 上述图片可以看到 因为csv文件自带第
  • 面试经典(22)---字符串组合

    题目 输入一个字符串 输出该字符串中字符的所有组合 举个例子 如果输入abc 它的组合有a b c ab ac bc abc 假设我们想在长度为n的字符串中求m个字符的组合 我们先从头扫描字符串的第一个字符 针对第一个字符 我们有两种选择
  • RenderCore模块抄写记录(ue5.2)

    共151个文件 47800行 截至2023年9月10日 剩余个文件 行
  • 冒泡排序、插入排序、选择排序的时间、空间复杂度以及优化方案

    文章目录 冒泡排序 插入排序 选择排序 冒泡排序 冒泡排序 Bubble Sort 是一种计算机科学领域的较简单的排序算法 需求 4 5 6 3 2 1 排序后 1 2 3 4 5 6 排序原理 比较相邻的元素 如果前一个元素比后一个元素大
  • Lock wait timeout exceeded解决方案

    Err 1205 Lock wait timeout exceeded try restarting transaction 基本原因 后提交的事务等待前面处理的事务释放锁 但是在等待的时候超过了mysql的锁等待时间 就会引发这个异常 1
  • 用latex写IEEE论文投稿的踩坑笔记

    目录 预备 安装TeXstudio 一 下载IEEE的LaTeX模板 二 修改引文方式 1 更新IEEEtran bst文件 2 新建一个 txt文件 把bib格式的引文信息全都复制进去 方法如下 保存后把文件后缀名改为 bib 3 改一下
  • NUC980开源项目15-编译默认配置uboot

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • 初始数据结构(c语言版本)

    目录 基本概念和专业术语 数据结构概念 数据结构的结构类型 1 逻辑结构 1 集合结构 2 线性结构 3 树结构 4 图结构或网状结构 2 存储结构 1 顺序储存结构 2 链式储存结构 数据类型和抽象数据类型 抽象数据类型的表示与实现 算法
  • SDWebImage 官方文档 翻译(v3.7.5 中文 简介,非API文档 )

    最近正在自学iOS 看到网上有项目用SDWebImage 便找来文档看看 顺便记录一下 也方便大家阅读 官方文档地址 http cocoadocs org docsets SDWebImage 3 7 5 以下是翻译内容 Web Image