前言:
最近公司项目不怎么忙, 闲暇时间把iOS 在面试中可能会遇到的问题整理了一番, 一部分题目是自己面试遇到的,一部分题目则是网上收录的, 方便自己巩固复习, 也分享给大家! 知识点比较多,比较杂,这里做了分类,下面是分类链接地址;
面试知识点整理 - 目录:
iOS | 面试知识整理 - OC基础 (一)
iOS | 面试知识整理 - OC基础 (二)
iOS | 面试知识整理 - OC底层 (三)
iOS | 面试知识整理 - UI 相 关 (四)
iOS | 面试知识整理 - 内存管理 (五)
iOS | 面试知识整理 - 多 线 程 (六)
iOS | 面试知识整理 - 网络相关 (七)
iOS | 面试知识整理 - 数据持久化 (八)
iOS | 面试知识整理 - Swift 基础 (九)
iOS | 面试知识整理 - 三方框架 (十)
iOS | 面试知识整理 - 三方框架 (十)
1.列举现在熟悉 iOS开发库和第三方开发库?
iOS开发中第三方框架非常丰富,种类和数量也繁多,所谓框架就是对每一类功能的封装,作为快捷的使用开发工具,提升开发效率
OC 常用的三方库如下:
框架名称 | 描述 |
---|---|
AFNetworking | 网络请求 |
SDWebImage | 图像异步加载 |
MJRefresh | 上啦下拉刷新 |
MJExtension | 数据解析 |
MBProgressHUD | 进度显示组件 |
FMDB | SQLite的封装数据库 |
Masonry | 自动布局 |
Charts | 图标绘制库 |
CocoaAsyncSocket | 异步 Socket 网络编程框架 |
AsyncDisplayKit | 异步UI 加载库 |
Aspects | 面向切面编程库 |
CocoaLumberjack | 简单高效快速灵活登录模块框架 |
DZNEmptyDataSet | 空列表UI库,列表为空时友好展示库 |
FSCalendar | 日历控件库 |
JazzHands | 应用滑动引导页页动画库 |
JSPatch | 热更新 |
AvoidCrash | 容错处理框架 |
Bludy | 错误收集 |
Swift比较常用库
框架名称 | 描述 |
---|---|
SnapKit | 自动布局 |
Alamofire | 网络请求 |
Kingfisher | 异步图片加载库 |
KakaJSON | 数据解析 |
PKHUD | 进度显示组件 |
SwiftyJSON | 转JSON库 |
2. SDWebImage加载原理?
- 当我们的
UIImageView
控件调用sd_setImageWithURL: ()...
方法 来进行加载图片; - 框架会直接调用
UIView+WebCache
中的sd_internalSetImageWithURL:() ...
, 该方法是UIImageView
和UIButton
的共有拓展方法 - 接下来调用
SDWebImageManager
类中的loadImageWithURL:() ...
方法,会根据提供的图片URL
加载图片,SDWebImageManager
主要负责管理SDImageCache
缓存和SDWebImageDownloader
下载器 - 首先进入
SDImageCache
类,调用queryCacheOperationForKey...
在内存或者磁盘进行查询,如果有图片缓存则进行回调展示, 如果没有查询到图片缓存,则进行下一步下载 - 在未查询到图片缓存时,
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 #合并指定分支到当前分支