黑马程序员:IOS面试宝典之第三方框架_黑马程序员面试技巧

2020-02-28 其他范文 下载本文

黑马程序员:IOS面试宝典之第三方框架由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“黑马程序员面试技巧”。

黑马程序员:IOS面试宝典之第三方框架

面试常问,你经常使用一些第三方库吗?比如AFNetworking SDWebimage JsonModel等,有没有去了解过里面的实现原理? 第三方框架

1.关于cocoaPods的问题:

1.1.使用过 CocoaPods 吗?它是什么? CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第三方框架。

在终端中进入(cd命令)你项目所在目录,然后在当前目录下,利用vim创建Podfile,运行: $ vim Podfile 然后在Podfile文件中输入以下文字: platform :ios, '9.2'

pod “SDWebImage”, “~> 2.0”

然后保存退出。vim环境下,保存退出命令是 :wq

这时候,你会发现你的项目目录中,出现一个名字为Podfile的文件,而且文件内容就是你刚刚输入的内容。

这时候,你就可以利用CocoPods下载AFNetworking类库了,运行以下命令:$ pod install 1.2.用cocopod管理第三方框架的时候我想改版本,怎么办到?

可以直接或者终端打开Podfile, 修改Podfile文件中第三方框架的版本

2.关于SDWebImage的问题: 2.1.SDWebImage的原理实现机制如何解决TableView卡的问题?

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 可以预先下载图片,方便后续使用。如何解决tableView卡 , 通过设置最大并发数, 设置当前页的cell, 而不是把所有cell一次性设置完, 以及数据图片的三级缓存, 直接保存在内存中和沙盒缓存中进行读取.降低网络请求的次数, 不仅节约用户流量.也会保证tableView滑动的流畅性

2.2.SDWebImage怎样实现图片的缓存机制的?

图片的缓存, 内存缓存, 沙盒缓存, 操作缓存, 以tableViewController为例: 每次cell需要显示,都需要重新调用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { }方法 每次调用tableView显示行的数据源方法时, 如果需要从网络加载图片, 就需要将加载图片这样的耗时操作放在子线程上执行, 从网络上下载的图片可以以键值对的形式保存在定义的可变字典中 ,将每张图片的唯一的路径作为键,将从网络下载下来的图片作为值, 保存在内存缓存中, 这样每次滑动tableView cell重用时就直接判断内存缓存中有没有需要的图片, 如果有就不需要再次下载,在没有出现内存警告或者程序员手动清理内存缓存时, 就直接从内存缓存中获取图片.为了每次退出程序,再次进入程序时, 不浪费用户的流量, 需要将第一次进入程序时加载的图片保存在本地沙盒缓存文件中, 在沙盒中保存的图片数据没有被改变之前, 下次开启程序就直接从沙盒的缓存文件中读取需要显示的图片, 并将沙盒缓存文件夹(Cache)中保存的图片保存到内存缓存中, 这样用户每次滑动tableView cell重用时直接从内存缓存中读取而不是从沙盒中读取, 节约时间.

黑马程序员:IOS面试宝典之c语言

黑马程序员:IOS面试宝典之c语言C语言语法1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量......

黑马程序员:IOS面试宝典之OC语言

OC语言(★★)有人可能会问对于我们学iOS的同学来讲,面试还会问Objective-C基础吗?答案是会的,但是不会太多,因此我给了两颗星的重要程度。一般笔试的时候出现Objective-C基础题的......

黑马程序员:IOS面试宝典之关于动画

关于动画1.谈谈你对Core Graphic 绘图的了解? CoreGraphics也称为Quartz 2D 是UIKit下的主要绘图系统,频繁的用于绘制自定义视图。Core Graphics是高度集成于UIView和其他UIK......

黑马程序员:IOS面试宝典数据存储

数据存储(★★)1、IOS中常用的数据存储方式有哪些?答:1.数据存储有四种方案,NSUserDefault,KeyChain,File,DB.2.其中File有三种方式:plist,Archiver,Stream 3.DB包括core Data和FM......

黑马程序员:IOS面试宝典之UITableView与UICollectionView

黑马程序员:IOS面试宝典之UITableView与UICollectionView 1.UITableView的重用机制?(或者如何在一个view上显示多个tableView,tableView要求不同的数据源以及不同的样式 (要......

《黑马程序员:IOS面试宝典之第三方框架.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
黑马程序员:IOS面试宝典之第三方框架
点击下载文档
相关专题 黑马程序员面试技巧 第三方 黑马 程序员 黑马程序员面试技巧 第三方 黑马 程序员
[其他范文]相关推荐
[其他范文]热门文章
下载全文