iOS面试题:三方框架问题

860 阅读4分钟

写在前面:

最近把 iOS 面试中可能会遇到的问题整理了一番, 题目大部分是网上收录的, 方便自己巩固复习, 也分享给大家; 希望对大家有所帮助! 对于答案,不一定都合适,欢迎大家积极讨论!!

1.列举现在熟悉 iOS开发库和第三方开发库?

iOS开发中第三方框架非常丰富,种类和数量也繁多,所谓框架就是对每一类功能的封装,作为快捷的使用开发工具,提升开发效率

OC 常用的三方库如下:

微信图片_20210913154435.png Swift比较常用库

微信图片_20210913154541.png

2. SDWebImage加载原理?

  1. 当我们的UIImageView控件调用sd_setImageWithURL: ()...方法 来进行加载图片;
  2. 框架会直接调用 UIView+WebCache中的sd_internalSetImageWithURL:() ..., 该方法是UIImageViewUIButton 的共有拓展方法
  3. 接下来调用SDWebImageManager类中的loadImageWithURL:() ...方法,会根据提供的图片URL 加载图片,SDWebImageManager 主要负责管理SDImageCache缓存和SDWebImageDownloader下载器
  4. 首先进入 SDImageCache类,调用 queryCacheOperationForKey...在内存或者磁盘进行查询,如果有图片缓存则进行回调展示, 如果没有查询到图片缓存,则进行下一步下载
  5. 在未查询到图片缓存时, SDWebImageDownloader类会进行网络下载,下载成功后进行回调展示,并将下载的图片缓存到内存和磁盘

总结:
根据Url内存中查询图片,如果有则展示,没有则在磁盘查询图片,查询到展示, 没有查询到在会通过网络下载进行展示。下载完后会存储到内存和磁盘,方便下次直接使用,磁盘查询和网络下载都是异步的,不会影响主线程.

3 .SDWebImage框架的架构是怎么样的?

SDWebImage 有三个核心组件:

  • SDWebImageManager: 核心管理器
  • SDImageCache: 缓存处理组件,主要负责内存缓存以及磁盘缓存
  • SDImageDownloader: 下载处理组件,负责异步下载图片等操作

4. SDWebImage 图片名称是如何处理?

  • 拿到图片对应的URL路径,对该路径进行MD5加密,作为名称进行保存

5. SDWebImage的最大并发数是多少?

_downloadQueue.maxConcurrentOperationCount = 6;

6. SDWebImage默认下载的超时时长是多少?

15秒, _downloadTimeout = 15.0;

7. SDWebImage默认缓存的时间是多久?

一周时间

_maxCacheAge = kDefaultCacheMaxCacheAge;
static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week

6.AFNetWorking 架构分析?

AFN根据功能模块来划分,可以分为5个部分:

  • NSURLSession - 负责网络通信工作(核心)
  • Serialization - 负责数据的序列化工作
  • Reachability - 负责网络状态监听工作
  • Security - 负责安全认证工作
  • UIKit - 对UIKit框架扩展

AFNetworking 实际上只是对 NSURLSession 高度地封装, 提供一些简单易用的 API 方便我们在 iOS 开发中发出网络请求并在其上更快地构建网络层组件并提供合理的接口;

7.AFNetworking 2.0 和3.0 的区别

  • 在AFNetworking 3.0之前,底层是通过封装NSURLConnection来实现的。
  • 在AFNetworking 3.0之后,也就是在iOS 9.0 之后,NSURLConnection被弃用,苹果推荐使用NSURLSession来管理网络请求,所以AFNetworking 3.0之后,底层是通过封装NSURLSession来实现的。
  • 从AFNetworking 3.0中之后,下面三个方法被弃用了。
AFURLConnectionOperation 
AFHTTPRequestOperation 
AFHTTPRequestOperationManager 
  • 依次被下面三个类代替了,同时请求方法也跟着改变了,所以AFNetworking 3.0以后发生了很大的变化。
AFURLSessionManager 
AFHTTPSessionManager 
AFNetworkReachabilityManager

8.MJExtension 字典转模型原理?

MJExtension是一个转换速度快、使用简单方便的字典转模型框架, 通过rumtime获取对象的所有成员变量(包括父类的),通过KVC进行赋值操作,达到了将字典数据映射到了模型对象上;

9.FMDB如何保证线程安全?

FMDB是对苹果SQLite的封装, 通过使用FMDatabaseQueue 来保证线程安全,FMDatabaseQueue是同步执行, _queue是 同步串行队列。

10.你读过哪些三方库源码?

11.常用的 git 指令有什么?

git clone # 克隆代码仓库
git add # 将工作区的修改提交到暂存区
git commit # 将暂存区的修改提交到当前分支
git reset # 回退到某一个版本
git stash # 保存某次修改
git pull # 从远程更新代码
git push # 将本地代码更新到远程分支上
git reflog # 查看历史命令
git status # 查看当前仓库的状态
git diff # 查看修改
git log # 查看提交历史
git revert # 回退某个修改
git checkout -b dev #创建分支,然后切换到分支
git branch # 查看当前分支
git merge dev #合并指定分支到当前分支

收录|原文地址

结语

再次说一声,对于答案,不一定都合适,,欢迎大家积极讨论;另外,为了感谢大家观看,还有更多大厂面试资料分享给大家!


精选大厂 · iOS面试题答案PDF文集

image.png