iOS网络图片处理及原理

iOS面试五十题(附答案) 链接:http://www.360doc.com/content/20/0926/20/65839522_937736217.shtml 问题 1.多线程的底层实现? 2.线程间怎么通信? 3.网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题? 4.用NSOpertion和NSOpertionQueue处理A,B,C三个线程,要求执行完A,B后才能执行C,怎么做? 5.列举cocoa中常见对几种多线程的实现,并谈谈多线程安全的几种解决办法及多线程安全怎么控制? 6.GCD内部怎么实现的? 7.你用 阅读详情

SDWebImage是一个很厉害的图片缓存的框架

 

AFNetworking集成的UIImageView+AFNetworking.h,但其对于图片的缓存实际应用的是NSURLCache自带的cache机制。而NSURLCache每次都要把缓存的(raw)data 再转化为UIImage,就带来了数据处理和内存方面的更多操作。

 

SDWebImage提供了如下三个category来进行缓存。

 

MKAnnotationView(WebCache)

UIButton(WebCache)

UIImageView(WebCache)

 

 

以最为常用的UIImageView为例:

 

#类

UIImageView+WebCache:

#方法:

 setImageWithURL:placeholderImage:options:

 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。

 

#类

SDWebImageManager:

#方法

 downloadWithURL:delegate:options:userInfo:

 SDWebImageManager是将UIImageView+WebCache同SDImageCache链接起来的类,

 SDImageCache:queryDiskCacheForKey:delegate:userInfo:

 用来从缓存根据CacheKey查找图片是否已经在缓存中

 

如果内存中已经有图片缓存,SDWebImageManager会回调SDImageCacheDelegate : imageCache:didFindImage:forKey:userInfo:

 

而 UIImageView+WebCache则回调

SDWebImageManagerDelegate:webImageManager:didFinishWithImage:来显示图片。

 

如果内存中没有图片缓存,那么生成NSInvocationOperation 添加到队列,从硬盘查找图片是否已被下载缓存。

 

根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate:。

 

如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:。进而回调展示图片。

 

如果从硬盘缓存目录读取不到图片,说明所有缓存都不存在该图片,需要下载图片,回调 imageCache:didNotFindImageForKey:userInfo:。

 

共享或重新生成一个下载器SDWebImageDownloader 开始下载图片。

 

图片下载由 NSURLConnection来做,实现相关 delegate 来判断图片下载中、下载完成和下载失败。

 

connection:didReceiveData:中利用 ImageIO 做了按图片下载进度加载效果。

 

connectionDidFinishLoading:数据下载完成后交给 SDWebImageDecoder 做图片解码处理。

 

图片解码处理在一个NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。

 

在主线程 notifyDelegateOnMainThreadWithInfo:宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给SDWebImageDownloader。

 

imageDownloader:didFinishWithImage:回调给 SDWebImageManager 告知图片下载完成。

通知所有的downloadDelegates 下载完成,回调给需要的地方展示图片。

 

将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。

 

写文件到硬盘在单独NSInvocationOperation 中完成,避免拖慢主线程。

 

如果是在iOS上运行,SDImageCache在初始化的时候会注册notification 到 UIApplicationDidReceiveMemoryWarningNotification 以及  UIApplicationWillTerminateNotification,在内存警告的时候清理内存图片缓存,应用结束的时候清理过期图片。

 

SDWebImagePrefetcher可以预先下载图片,方便后续使用。

 

iOS之深入解析YYImage图片处理的底层原理 YYImage的使用 特性 支持WebP、APNG、GIF类型动画图像的播放/编码/解码; 支持WebP、PNG、GIF、JPEG、JP2、TIFF、BMP、ICO、ICNS类型静态图像的显示/编码/解码; 支持PNG、GIF、JPEG、BMP类型图片的渐进式/逐行扫描/隔行扫描解码; 支持多张图片构成的帧动画播放,支持单张图片的 sprite sheet 动画; 高效的动态内存缓存管理,以保证高性能低内存的动画播放; 完全兼容 UIImage 和 UIImageView,使用方便。 基本用法 显示动 阅读详情

相关推荐

iOS之深入解析图片解压缩到渲染的过程与原理

一、图像从文件到显示屏幕过程 ① 图像显示到屏幕原理 通常计算机在显示是CPU与GPU协同合作完成一次渲染。接下来了解一下CPU/GPU等在这样一次渲染过程中,具体的分工是什么? CPU:计算视图frame,图片解码,需要绘制纹理图片通过数据总线交给GPU; GPU:纹理混合,顶点变换与计算,像素点的填充计算,渲染到帧缓冲区; 时钟信号:垂直同步信号V-Sync / 水平同步信号H-Sync; iOS设备双缓冲机制:显示系统通常会引入两个帧缓冲区,双缓冲机制。 ② 图片显示到屏幕上是CPU与GPU的协

╰つ栺尖篴夢ゞ 1760

iOS黑(灰)白化实现方案

根据业务不一样,大致产品会有两种需求:需求1:全部设置为黑白色 需求2:某个界面设置为黑白色 大致的实现方案:方案一:服务端下发所有黑(灰)图片,字体颜色支持动态下发 这个,如果是只有某个界面还好,如果是全量替换图片,工作量太大方案二:里面大致涉及到:image、UILabel的color、UIButton的Color、webView、Video等等对于image,一般都是使用UIImageView去显示,因此,利用runtime里面的方法交换,让setImage:方法走自己的。 然后在私有方法里面实现对图

ForeverMyheart的博客 1865

IOS从网络上加载一系列的图片并显示在tableview上的例子

很完整的一个tableview延迟加载图片例子,从网络上加载json数据并解析,而且tableview在滑动过程中不会去向服务器做图片的请求

iOS 开发之 SDWebImage 底层实现原理分析

  SDWebImage 是一个比较流行的用于网络图片缓存的第三方类库。这个类库提供了一个支持缓存的图片下载器。为了方便操作者调用,它提供了很多 UI 组件的类别,例如:UIImageView、UIButton、等等。   使用方式很简单:   1、CocoaPods 安装:   platform :ios, '7.0'   pod 'SDWebImage', '~> 4....

637

card.io-dmz,card.io的核心图像处理和机器学习代码,在ios和android之间共享。.zip

card.io-dmz用作main card.io sdk、card.io-ios-source或card.io-android-source的子模块。

手把手教你如何修改YOLO11的模型结构(以CBAM和可变性卷积为例)

YOLO11修改模型结构

2401_86807530的博客 1万+

iOS 第三方框架-SDWebImage

iOS中著名的牛逼的网络图片处理框架。包含的功能:图片下载、图片缓存、下载进度监听、gif处理等等。用法极其简单,功能十分强大,大大提高了网络图片的处理效率。国内超过90%的iOS项目都有它的影子。 项目地址 https://github.com/rs/SDWebImage   基本处理原理:   1.面试题1> 如何防止一个url对应的图片重复下载* 查看“基本处理原理”上...

weixin_34309543的博客 90

从Power到HO:一文搞懂主流脑图谱在DPABI里怎么选,让你的rs-fMRI分析更精准

本文深入解析了rs-fMRI分析中主流脑图谱(如Power、HO、AAL等)在DPABI中的科学选择策略,帮助研究者根据不同的神经科学研究目标优化分析流程。从解剖学图谱到功能连接图谱的特性对比,到DPABI实操中的多图谱分析工作流,提供了全面的方法论指导,助力提升静息态功能磁共振成像(rs-fMRI)研究的精准度和可重复性。

weixin_30654583的博客 404

【学习总结】【多线程】一些面试题

1. 多线程的底层实现?多线程的实现原理?多线程有什么作用?使用场合是什么? 一般问这个的话,比较空泛,分析一下,问题如没实际使用场景的话,可从问题原理上解释 1.1)首先搞清楚什么是线程、什么是多线程、还可以适当带一下进程的概念。 Mach系统是第一个以多线程方式处理的任务~。(了解) 【学习总结】【多线程】 线程 & 进程 & NSThread(多线程的一套...

bahen0634的博客 124

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

zilan23的博客 3650

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

iOS开发实战:Base64加密解密入门指南

实际操作发现,无需配置Xcode环境就能快速验证Base64编码效果,特别适合临时测试加解密流程。网站提供的实时预览功能让调试过程变得非常直观,比在真机上反复编译节省大量时间。

ThunderstormDragon65的博客 349

Scale-up,scale-out技术概述

本文系统分析了Scale-up与Scale-out两种扩展技术在现代计算中的应用与发展。Scale-up通过增强单节点性能,适用于高耦合任务,而Scale-out通过横向扩展节点,实现高可用性和无限扩展。在芯片层面,Chiplet技术推动Scale-up发展;在数据中心层面,二者协同工作构建强大集群。光模块在长距离高带宽传输中发挥关键作用。文章对比了NVIDIA、AMD和Broadcom三家公司的技术路线,指出NVIDIA采用封闭生态,AMD选择开放标准,Broadcom则主导底层连接技术。未来发展方向将聚

元直的博客 1446

基础知识三

基础知识三1 . UITextView 和 UITextField 区别 UITextView 继承自 UIScrollView ; UITextField 继承自 UIControl; UITextView 支持多行; UITextField 支持单行; UITextView 没有 placeholder 属性; UITextField 有 placeholder 属性; UITextView

u014359380的专栏 409

AI安全护栏评测:TrustedExecBench如何量化评估大模型防护能力

在人工智能和机器学习领域,模型安全对齐是确保AI系统可靠、可控的核心技术。其原理是通过设计安全机制(即“护栏”)来约束模型行为,防止生成有害、偏见或越界内容。这项技术的核心价值在于平衡AI能力与风险管控,是可信AI部署的基石。应用场景广泛覆盖内容审核、对话系统、代码生成等需要人机交互的领域。本文聚焦的TrustedExecBench项目,正是针对“护栏”性能量化评估这一痛点,提供了一个标准化、自动化的开源评测框架。该工具通过构建多维度的恶意测试套件,并引入基于模型的动态评判机制,能够系统性地检验大语言模型在

weixin_42525428的博客 378

PSINS工具箱学习(四)捷联惯导更新算法

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning。

实践出真理,接毕设/课设项目开发指导 607

SDWebImageInfo

SDWebImage简介 iOS中著名的牛逼的网络图片处理框架 包含的功能:图片下载、图片缓存、下载进度监听、gif处理等等 用法极其简单,功能十分强大,大大提高了网络图片的处理效率 国内超过90%的iOS项目都有它的影子 框架地址:https://github.com/rs/SDWebImage 获得框架 进入终端 输入以下命令 git clone --recursive https://gith

jiahao8915的专栏 2243

费雪的未来增长评估:预测颠覆性技术的影响

本文旨在提供一个系统性的框架,用于评估和预测颠覆性技术的增长轨迹。我们将重点关注费雪增长模型(Fisher-Pry Model)这一经典技术扩散理论,探讨其在现代技术预测中的应用价值。文章首先介绍费雪增长模型的基本概念,然后深入其数学原理和算法实现。随后展示实际应用案例,讨论工具资源,最后探讨未来发展趋势。每个部分都包含详细的技术实现和理论分析。费雪增长模型(Fisher-Pry Model):一种描述技术替代过程的S型增长模型,用于预测新技术取代旧技术的速率。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 929

周一晚上(2015.11.4)朋友模拟的一次面试

感谢。他一路时不时的指点。O(∩_∩)O~ 单例  ---gcd ---工厂模式---tableview----网络 1:平常用什么第三方网络框架?    AFNetWorking ,然后涉及到图片的话用sdwebimage. 2 :sdwebimage的缓存策略是什么? 3:AFNetworking里面有同步请求吗?      没有同步请求,点击进去看会发现里面无论哪个,其实

春风得意,马蹄仍急;少年豪情,一笑难回。 581

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

flutter技术解析与实战!史上最强vue总结来了,威力加强版

背景 坐标广州,五年iOS开发经验。 最近面试了一位工作12年的程序员, 这位老哥有3年java开发经验,2年H5,7年iOS开发经验,简历上写着精通Java,iOS,熟悉H5开发。没有具体的技术点。 说实话我很期待这位老哥的面试,于是让人事邀约了他。 老哥面试的气场很足,我也很尊敬他,一大波的自我介绍之后,我们进入了正题。 我问了他Runloop,他说几乎没用过Runloop,于是我给他举了个小例子,老哥给我的答案是百度可以解决。 于是我有问了他KVC,老哥还是说不清楚,于是我问了最基础的copy,wea

Sunbuyi的博客 1538

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IOS-4-面试题1:黑马程序员IOS面试题大全

IOS-4-面试题1:黑马程序员IOS面试题大全

IOT_LI的专栏 1360

SwiftTask最佳实践:10个技巧提升你的异步代码质量

SwiftTask是一个强大的Swift异步任务处理库,它扩展了Promise模式,为你的iOS和macOS应用添加了进度跟踪、暂停、取消和重试功能。如果你正在寻找一个简单而强大的异步编程解决方案,SwiftTask绝对是你的不二选择!🚀 ## 为什么选择SwiftTask? 在Swift开发中,处理异步操作常常让人头疼。传统的回调地狱、复杂的错误处理、难以管理的任务生命周期...这些问题S

gitblog_00001的博客 374

iOS框架研究之SDWebImage的原理以及使用流程

什么是SDWebImage piOS中著名的牛逼的网络图片处理框架 p包含的功能:图片下载、图片缓存、下载进度监听、gif处理等等 p用法极其简单,功能十分强大,大大提高了网络图片的处理效率 p国内超过90%的iOS项目都有它的影子 pn项目地址phttps://github.com/rs/SDWebImage ...

a359798678的博客 142

谈谈那些你不知道的iOS

Linux编程点击右侧关注,免费入门到精通!作者|胖虎_callmeVhttps://www.jianshu.com/p/fce6c7af5773一、谈谈多线程的应用通常...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 431

iOS资源帖-优秀博客、iOS开发技术文、学习网站

原链接:https://www.jianshu.com/p/619c61d9c8fb 一些博客 王巍 Objc中国发起人、Line工程师 ibireme YYKit作者 bang JSPatch作者 唐巧 《iOS开发进阶》作者、猿题库工程师 孙源 前百度工程师,现滴滴工程师 玉令天下 xuyafei 张不坏 NSHipster中...

weixin_30787531的博客 630
上一篇: iOS 图片压缩以及保存到doucument的方法
下一篇: ARC规则及使⽤
明理明智
博客等级 码龄15年 7粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值