当前位置: 首页 > news >正文

【多线程-第四天-SDWebImage的常见面试题-进一步解读SDWebImage的源代码 Objective-C语言】

一、SDWebImage的常见面试题

通知

1.SDWebImage的最大并发数是多少,为什么有最大并发数,先回忆,最大并发数这个属性是谁的,是操作队列的,所以SDWebImage它里边,是不是用到队列了,是不是要找到这个队列在哪儿,队列在哪儿,我告诉大家这么一个文件,在SDWebImageDownloader.m中的init方法,_downloadQueue.maxConcurrentOperationCount = 6,我们找到SDWebImageDownloader.m,我们看,这儿有什么,

通知

NSOperationQueue,队列,起的名字叫做downloadQueue,就是下载队列,好,我们找,这个属性,要去初始化,初始化的话,只能在init之类的方法中,来初始化,往下看,

通知

init的时候,要找到downloadQueue的初始化,就是这句,

_downloadQueue = [NSOperatioinQueue new];

这个位置,设置最大并发数,等于多少,

_downloadQueue.maxConcurrentOperationCount = 6;

最大并发数,等于6,所以,SDWebImage队列中最大的并发数是6,

通知

2.SDWebImage支持gif吗,支持,刚刚演示过,只是最新的那个版本中有问题,老版本是没有问题的,是可以支持GIF的,它是支持GIF的,并且有一个分类,是支持的,怎么去实现的,我们也看过了,

3.SDWebImage中怎么判断文件的类型的,

SDWebImage,它不光支持GIF,还支持JPG,还支持PNG,还支持我们不常用的一种格式,WEBP,一种图片格式,既然它支持这多种图片格式,那SDWebImage里边,肯定要想办法去判断出来,这些文件的格式,每种文件要做不同的处理的,尤其是GIF,要做不同的处理的,它是怎么去识别出来,这些文件格式的,来看,有一个类,有一个分类,NSData+ImageContentType,

通知

NSData+ImageContentType:这块儿有一个分类,NSData是二进制数据,二进制数据,我们来看,它提供了一个方法,- (NSString *)sd_contentTypeForImageData:(NSData *)data{

uint8_t c;

[data getBytes:&c length:1];

switch©{

case 0xFF: return @“image/jpeg”;

case 0x89:return @“image/png”;

case 0x47:return @“image/gif”;

case 0x49:

case 0x4D:return @“image/tiff”;

case 0x52:

//R as RIFF for WEBP

if([data length] < 12){

return nil;

}

通知

这个方法中干什么呢,获取data,getBytes,获取字节,获取多少个字节,1个,这个data是那个图片的二进制数据,它会获取这个二进制数据的第一个字节,为什么要获取第一个字节,因为第一个字节,就代表了这个文件的类型,好,我们看一眼啊,我可以随便拖一张图片进来,

通知

把这个2.gif拖到项目里来,

通知

拖进来,点击Finish,

通知

在这个2.gif,点右键,选择Open As,选择Hex,16进制,我以16进制的方式,把它打开,

通知

好,第一个数字是多少,47,吧,然后右边这块儿,是什么,GIF89a,…?..e.,GIF吧,这块儿是GIF,我们来看SDWebImage里边的NSData+ImageContentType这个分类,

通知

看这里,0x47:return @“image/gif”,0x47,果然对应的是GIF,当47的时候是什么,GIF吧,这是第一个字节,根据第一个字节,去判断这个文件的类型,你可以自己再去证明一下jpeg,和png,跟这块儿都是对应的,是没有问题的,所以啊,SDWebImage里边,它有一个类,它是怎么去判断文件类型的,

通知

是根据文件的第一个字节,来判断它是什么类型的,

4.SDWebImage缓存文件的名称,如何防止冲突,它是怎么处理的,我们看过了,怎么处理的,我们看过下载的那个图片的文件名了,是,为了防止缓存的图片名称冲突,所以根据md5,计算的,使用md5计算这个名称,目的就是为了防止图片名称冲突,关于md5,我们后边要解释,md5生成的随机的那个内容,并不是绝对不会重复的,它可能会重复,但是重复的几率很小很小很小,那就是几乎不会重复的,好,那我们怎么来获取一个文件的md5值,

终端中测试:echo -n “图片路径” | md5

这里边的echo:是回显,

-n:是输入一个内容,输入一个“图片路径”,

|:竖线,是把“图片路径”,输入给md5,这个程序,这个程序,会根据这个图片,计算出来这个图片的md5值,这是终端的命令,那么,需要一个图片的路径

相关文章:

  • 使用Docker搭建开源Email服务器
  • stl 容器 – map
  • DDoS防御发展史
  • 7.Rust+Axum:打造高效 RESTful API 的最佳实践
  • Python中type()函数的深度探索:类型检查与动态类创建
  • 吴恩达强化学习复盘(1)聚类算法|K-Means算法
  • 解决jupyter notebook修改路径下没有c.NotebookApp.notebook_dir【建议收藏】
  • js实现的前端水印
  • 人工智能代理重塑数字成功:为何面向机器的营销是下一前沿
  • OOM 未触发 JVM 崩溃的可能原因
  • 如何-批量修改文件夹的命名
  • FPGA-VGA
  • Android——动画
  • Node.js 异步调用淘宝 API 实践:高吞吐商品详情数据采集方案
  • 双层Key缓存
  • 010301-cdn_waf-web扩展1-基础入门-网络安全
  • [密码学实战]国密算法面试题解析及应用
  • 使用Python绘制AUC曲线(即ROC曲线)
  • 极狐GitLab 用户 API 速率限制如何设置?
  • 【java 13天进阶Day12】XML和Dom4j,装饰模式,工厂模式,commons-io工具包,Base64
  • 揭晓!人形机器人半马完赛奖+专项奖发布
  • 6万余采购商消博会上“扫货”,全球好物“购物车”满载而归
  • 黄山旅游:去年黄山景区累计接待进山游客492.24万人,同比增长7.6%
  • 谁在向张福生行贿?
  • 广西旱情如何?农业厅:近半数农田墒情不足至干旱,本月降雨将渐增
  • 肯尼亚总统鲁托将访华,外交部:中肯两国元首将举行会谈