SDWebImage
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 0.第三方框架SDWebImage (1)SDWebImage基本使用 01 设置imageView的图片 [cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed: @"placehoder" ]]; 02 设置图片并计算下载进度 //下载并设置图片 /* 第一个参数:要下载图片的url地址 第二个参数:设置该imageView的占位图片 第三个参数:传一个枚举值,告诉程序你下载图片的策略是什么 第一个block块:获取当前图片数据的下载进度 receivedSize:已经下载完成的数据大小 expectedSize:该文件的数据总大小 第二个block块:当图片下载完成之后执行该block中的代码 image:下载得到的图片数据 error:下载出现的错误信息 SDImageCacheType:图片的缓存策略(不缓存,内存缓存,沙盒缓存) imageURL:下载的图片的url地址 */ [cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed: @"placehoder" ] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) { //计算当前图片的下载进度 NSLog( @"%.2f" ,1.0 *receivedSize / expectedSize); } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { }]; 03 系统级内存警告如何处理(面试) //取消当前正在进行的所有下载操作 [[SDWebImageManager sharedManager] cancelAll]; //清除缓存数据(面试) //cleanDisk:删除过期的文件数据,计算当前未过期的已经下载的文件数据的大小,如果发现该数据大小大于我们设置的最大缓存数据大小,那么程序内部会按照按文件数据缓存的时间从远到近删除,知道小于最大缓存数据为止。 //clearMemory:直接删除文件,重新创建新的文件夹 //[[SDWebImageManager sharedManager].imageCache cleanDisk]; [[SDWebImageManager sharedManager].imageCache clearMemory]; 04 SDWebImage默认的缓存时间是1周 05 如何播放gif图片 /* 5-1 把用户传入的gif图片->NSData 5-2 根据该Data创建一个图片数据源(NSData->CFImageSourceRef) 5-3 计算该数据源中一共有多少帧,把每一帧数据取出来放到图片数组中 5-4 根据得到的数组+计算的动画时间-》可动画的image [UIImage animatedImageWithImages:images duration:duration]; */ 06 如何判断当前图片类型,只判断图片二进制数据的第一个字节 + (NSString *)sd_contentTypeForImageData:(NSData *)data; 07 内部如何进行缓存处理?使用了NSCache类,使用和NSDictionary类似 08 沙盒缓存图片的命名方式为对该图片的URL进行MD5加密 echo -n "url" |MD5 09 当接收到内存警告之后,内部会自动清理内存缓存 10 图片的下载顺序,默认是先进先出的 |
将来的自己,会感谢现在不放弃的自己!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现