iOS面试题---分析下SDWebImage

面试题(5家2offer顺利通过) runtime nstimer block 多线程 uiview和calayer 属性词 响应链 kvo和kvc sdwebimage 图片渲染过程 性能优化 内存管理 数据存储 设计模式 网络层socket和http区别 响应式编程 1.runtime 调用[receiver selector];后,进行的流程: 编译阶段:[receiver selector];方法被编译器转换为: Objc_msgSend(receiver, selector)--- ... 阅读详情

1.SDWebImage 加载图片的流程

1.入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。

2.进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:.

3.先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。

4.SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示图片。

5.如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。

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

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

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

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

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

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

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

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

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

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

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

17.将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。写文件到硬盘也在以单独 NSInvocationOperation 完成,避免拖慢主线程。

18.SDImageCache 在初始化的时候会注册一些消息通知,在内存警告或退到后台的时候清理内存图片缓存,应用结束的时候清理过期图片。

19.SDWI 也提供了 UIButton+WebCache 和 MKAnnotationView+WebCache,方便使用。

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

2.SDImageCache是怎么做数据管理的?

SDImageCache分两个部分,一个是内存层面的,一个是硬盘层面的。内存层面的相当是个缓存器,以Key-Value的形式存储图片。当内存不够的时候会清除所有缓存图片。用搜索文件系统的方式做管理,文件替换方式是以时间为单位,剔除时间大于一周的图片文件。当SDWebImageManager向SDImageCache要资源时,先搜索内存层面的数据,如果有直接返回,没有的话去访问磁盘,将图片从磁盘读取出来,然后做Decoder,将图片对象放到内存层面做备份,再返回调用层。

3.内部做Decoder的原因 (典型的空间换时间)

由于UIImage的imageWithData函数是每次画图的时候才将Data解压成ARGB的图像,所以在每次画图的时候,会有一个解压操作,这样效率很低,但是只有瞬时的内存需求。为了提高效率通过SDWebImageDecoder将包装在Data下的资源解压,然后画在另外一张图片上,这样这张新图片就不再需要重复解压了

更多面试题:

iOS面试:总结了几十家出的面试题分享(一)

iOS面试:总结了几十家出的面试题分享(二)

想进大厂,面试题必不可少!(iOS面试合集!)

一份iOS开发者的学习路线参考

iOS面试:SDWeblmage的底层实现 SDWebImage 是一个高效且易于使用的图片加载和缓存库,它通过异步加载、内存和磁盘缓存、图像处理等机制,确保了在网络环境中的高效运行。SDWebImage 是一个非常流行的 iOS 图片加载和缓存库,旨在简化图像的异步下载及缓存过程。SDWebImage 采用了可插拔的架构,以支持自定义的图像处理器,或者替换网络请求的实现。处理后,图像会被存入缓存。SDWebImage 还会管理下载状态,比如通过 Block 回调来处理成功或失败的状态,并能够取消未完成的请求,避免重复加载已经在进行中的请求。 阅读详情

相关推荐

2020,300道高级iOS开发面试题(最新整理)

这个栏目将持续更新–请iOS的小伙伴关注! 一:知名大厂iOS开发面试题篇 1、腾讯—最新iOS面试题总结 2、百度—最新iOS面试题总结 3、头条—最新iOS面试题总结 4、阿里—最新iOS面试题总结 5、美团—最新iOS面试题总结 6、某大厂—最新iOS面试题总结 7、抖音–最新iOS面试题总结 8、拼多多–最新iOS面试题总结 9、快手–最新iOS面试题总结 10、虎牙–最新iOS面试题总结 11、iOS面试–最新快手iOS面试题 12、iOS面试–字节跳动最新iOS开发面试题 13、(最新)iO.

D_猿员的博客 7029

SDWebImage缓存图片的机制

在实际开发过程中,为了提高项目的开发效率,我们会经常使用一些第三方的框架。近期项目中用到了SDWebImage框架,根据项目中使用到的情景,对SDWebImage做了一些分析和总结,特此,简单的分享一下自己的想法。

ITclody的专栏 730

iOS面试题精选—SDWebImage原理

SDWebImage原理 一个为UIImageView提供一个分类来支持远程服务器图片加载的库。 功能简介: 1、一个添加了web图片加载和缓存管理的UIImageView分类 2、一个异步图片下载器 3、一个异步的内存加磁盘综合存储图片并且自动处理过期图片 4、支持动态gif图 5、支持webP格式的图片 6、后台图片解压处理 7、确保同样的图片url不会下载多次 8、确保伪造的图片url不会...

WhyLW的博客 981

关于SDWebImage的使用和相关面试题

最近这几天我可能会纠结于较常用的第三方框架,因为如今面试太多问底层的,必须知道一些。请关注我!

帅气如我丶的博客 1469

在iOS中高效的加载图片

在iOS开发中,图片(UIImage)是我们在开发中,占用手机内存比较大的对象,如果在运行过程中,内存占用过大,对电池寿命会造成影响,如果超过了内存占用的最大值,会造成App的crash。这篇文章从图片的加载原理和SDWebImage的源码实现的角度来介绍图片加载。 图片的渲染流程 在iOS中使用 UIImage和UIImageView来记载图片,他俩遵守经典的MVC架构,UIImage相当于Model,UIImageView相当于View: UIImage负责加载图片,UIImageView负责渲染图片

原来是泽镜的博客 1576

抖音--最新iOS面试题总结

关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教。主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧。 一面 最近公共父节点(两个节点,都可能为null,都可能不在树上。) 反转链表(常规题) HTTP了解吗?HTTP2.0介绍下 iOS9-13,每个版本讲一个特性 怎么实现多个任务执行完后,再统一处理(应该是同步阻塞、栅栏...

D_猿员的博客 1640

2024最新!!!iOS高级面试题,全!(一)

Objective-C的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;在核心动画中,动画的实现原理是通过不断地修改CALayer的属性值来实现的。消息发送:当调用某个对象的方法的时候,会通过isa指针找到该类的cache缓存列表中查找,如果没有找到就去方法列表中查找,如果还没有找到就去他的父类中查找,直到最后查找到后为nil。

u010609022的专栏 1万+

保姆级教程:用TIA Portal V17给S7-1200 PLC和HMI做个联调仿真(附抢答器完整项目包)

本文提供了一份详细的TIA Portal V17教程,指导如何实现S7-1200 PLC与HMI的联合仿真开发。通过抢答器项目实例,涵盖从环境搭建、PLC编程到HMI设计的全流程,帮助工程师高效完成工业自动化系统的虚拟调试,显著提升开发效率。

weixin_30417487的博客 624

iOS面试题深度解析:weak原理、HTTPS加密与SDWebImage实现

本文基于iOS面试题库中的核心知识点进行深度解析,涵盖weak修饰符实现原理、HTTPS加密机制、网络通讯加密方式、iOS缓存策略、常见Crash原因分析、SDWebImage实现原理以及Crash收集定位等关键技术点。这些内容不仅是iOS开发者面试中的高频考点,更是日常开发中需要掌握的核心技能。 ## weak修饰符自动置nil的实现原理 ### 核心机制 weak修饰符是Objectiv

gitblog_00589的博客 489

通俗讲解清楚光线追踪中的蒙特卡洛积分

彻底讲解光线追踪中的蒙特卡洛积分

qq_37366618的博客 1243

数据讲述中国故事!和鲸助力中国综合社会调查(CGSS)数据分析与可视化大赛圆满收官

用数据研究中国问题、总结中国道路、讲述中国故事。和鲸作为协办单位全程支持本次大赛,为中国人民大学中国调查与数据中心实施全套赛事系统,同时提供完备而周全的赛事运营服务。

ModelWhale的博客 1410

原理面试题_iOS面试题:SDWebImage原理

SDWebImage一个为UIImageView提供一个分类来支持远程服务器图片加载的库。功能简介: 1、一个添加了web图片加载和缓存管理的UIImageView分类 2、一个异步图片下载器 3、一个异步的内存加磁盘综合存储图片并且自动处理过期图片 4、支持动态gif图 5、支持webP格式的图片 6、后台图片解压处理 ...

weixin_32211243的博客 308

如何利用DeepSeek自动生成PLC程序?

在工业自动化领域,PLC是核心控制设备,其编程效率和质量直接影响生产线的运行效果。 然而,传统PLC编程依赖工程师手动编写代码,不仅耗时耗力,还容易出错。通过自动生成PLC程序,DeepSeek不仅大幅提升了编程效率,还优化了代码质量。 那么DeepSeek到底能否自动生成PLC程序呢? 有位电气工程师就尝试让DeepSeek设计一套五层电梯控制系统的PLC程序,下面就让我们看看吧。 技术原理:DeepSeek如何实现自动编程DeepSeek利用自然语言处理技术,将工程师输入的文本指令转换为PLC代码。例

Qinmingyue13的博客 6177

iOS面试题

请描述一下你的iOS应用开发流程。 注册APP ID 注册成为苹果开发者 开发 真机调试 打包和发布 等待审核 上线 1.app分发方式 所谓分发方式简单点讲就是你的app都可以通过哪些途径给用户使用。 a:个人或者公司的开发者账号可以上传appStore,用户通过appStore下载。 b:企业账号:打包分发。 c:打包到本地: produc...

码农天后的博客 4005

流媒体协议-RTMP简介

与rtsp 不同,RTSP(Real-Time Streaming Protocol)是一个控制协议,负责控制媒体流的传输,但不传输媒体数据本身。RTSP 可以通过 TCP 或 UDP 传输 RTP 包来传输音视频数据。 RTMP(Real-Time Messaging Protocol)是一个综合性的协议,不仅可以传输音视频数据,还可以传输信令控制指令。RTMP 使用 TCP 作为传输协议,可以直接在 TCP 连接上传输音视频数据,也可以传输控制指令,实现了音视频流的实时传输和控制

xiaoshuaijinniu的博客 4550

一文读懂无人机AI识别算法,原理、技术、应用

本文详细介绍了无人机识别算法的工作原理、技术优势以及在多个行业的应用前景,展现了其在提升安全监控、资源管理和应急响应中的关键作用。尽管无人机识别算法在多个领域展现出巨大潜力,但仍面临技术挑战,如算法的准确性、数据的实时处理能力以及对复杂环境的适应性。4. 消防与城市管理: 无人机识别算法在消防和城市管理中的应用,为相关部门提供了及时的信息支持,提升了应急处置能力和城市管理水平。1. 公安监控: 无人机识别算法在公安领域的应用,可以实时识别犯罪嫌疑人和违法行为,有效提升城市治安管理的智能化水平。

foiadrone的博客 1848

的底层实现 ios_2020,300道高级iOS开发面试题(最新整理)

这个栏目将持续更新--请iOS的小伙伴关注!一:知名大厂iOS开发面试题篇1、腾讯—最新iOS面试题总结 2、百度—最新iOS面试题总结 3、头条—最新iOS面试题总结 4、阿里—最新iOS面试题总结 5、美团—最新iOS面试题总结 6、某大厂—最新iOS面试题总结 7、抖音--最新iOS面试题总结 8、拼多多--最新iOS面试题总结 9、快手--最新iOS面试题总结 10、虎牙--最新iOS面试...

weixin_33587731的博客 275

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记-----GCN在交通领域的应用(二) 一、论文翻译: 1、摘要: 及时准确地交通预测对于城市交通控制和指导具有至关重要的意义。由于交通流量的非线性和复杂性,传统的方法不能满足中长期预测任务的需求,并且往往会忽略时空数据的时间和空间依赖特性。在这篇论文中,为了处理在交通领域的时间序列预测问题...

cy_believ的博客 1916

ios面试题

1.csdn ochenmengo博主有分享 2.sdwebimage相关iOS面试题:SDWebImage原理 - 简书 作者:iOS猿_员

随便 691

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有帮助,可以清晰帮你展示出模型速度性能的提升以及轻量化的效果(模型大小),对于以提高精度为目的的读者本文也能够帮助大家展示出现阶段的模型速度指标。所以本文的内容是十分有用的机制,对于大家发表论文来说,下面的图片为运行后的效果可以看到,该有的指标均已打印(本文内容为我独家创新,全网无第二份)下面是效果图和文

Snu77的博客 3628

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

李洪强iOS经典面试题142-第三方框架及其管理

李洪强iOS经典面试题142-第三方框架及其管理 第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第三方框架。 在终端中进入(cd命令)你项目所在目录,然后在当前目录下,利用vim创建Podfile,运行: $ vim Podfile 然后在Podfile文件中输入以下...

aaa1231722的博客 198

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

iOS面试题合集--BAT及各大中小型公司

简介 本文主要内容为iOS面试题目,对各个面试题进行一些分类(持续更新),包含了BAT,及各大中小型公司的面试题集合。 正文 中小型公司 谈下iOS开发中知道的哪些锁? 哪个性能最差?SD和AFN使用的哪个? 一般开发中你最常用哪个? 哪个锁apple存在问题又是什么问题? iOS下如何实现指定线程数目的线程池? 如何用HTTP实现长连接? http的post和get啥区别 使用atomic一定是线程安全的吗? 数据库建表的时候索引有什么用? 介绍下iOS设备获取唯一设备号的历史

iOSpipi的博客 381

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS面试题总结

1.app分发方式 所谓分发方式简单点讲就是你的app都可以通过哪些途径给用户使用。 a:个人或者公司的开发者账号可以上传appStore,用户通过appStore下载。 b:企业账号:打包分发。 c:打包到本地: product->archive /window->organizer --->import -->save for a...

weixin_30730151的博客 1491

iOS面试题精选

1、SDWebImage原理 2、什么是Block? 3、RunLoop剖析 一、 SDWebImage原理 一个为UIImageView提供一个分类来支持远程服务器图片加载的库。 功能简介: 1、一个添加了web图片加载和缓存管理的UIImageView分类 2、一个异步图片下载器 3、一个异步的内存加磁盘综合存储图片并且自动处理过期图片 ...

weixin_33908217的博客 286

iOS面试题(五)

1、tableView的重用机制? UITableView 通过重用单元格来达到节省内存的目的: 通过为每个单元格指定一个重用标识符,即指定了单元格的种类,当屏幕上的单元格滑出屏幕时,系统会把这个单元格添加到重用队列中,等待被重用,当有新单元格从屏幕外滑入屏幕内时,从重用队列中找看有没有可以重用的单元格,如果有,就拿过来用,如果没有就创建一个来使用。 2、在手势对象基础类UIGes...

WinJayQ的专栏 357
上一篇: iOS Runtime面试题
下一篇: iOS面试题:APP该如何优化
iOSpipi
博客等级 码龄5年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值