1、MVC跟MVP的区别以及使用的优缺点是什么?
MVC中V和C之间的关系:C可以控制V的渲染这部分,V起显示作⽤用,同时V上发⽣生的⽤用户事件也可以给C来做⼀些处理理.
C和M之间的关系: C可以修改M. M跟V之间的关系: M可以改变V, V读取M给它提供的数据, 可以展示界 ⾯面. MVC中, V跟M之间是有依赖关系的. 在使⽤用MVC的时候, ⽹网络是从C中发起的, C整体来说承担的业务逻辑会⽐较大, 它起到了控制V和M的作⽤用
MVP是面向协议编程,V跟Model之间是完全没关系的, 他们之间不存在引用和依赖关系. 耦合的操作全部由 Presenter来进⾏处理理.
网络请求在Model中发起, 把数据传给P来进⾏处理, V也是⼀样,它要拿数据, 就遵守P提供的协议, 实现P给它提供的协议方法. 获取数据之后, 就可以进⾏展示了. 当然它的⼀些发起操作还是由C来进行. MVP中C⾥面的代码很少, 主要逻辑由P来处理理. 由于是⾯向协议编程, 所以在开发的时候, 完全可以把⽹络那层封装起来,V和C完全没必要关心⽹络那层.
2、MVC经典的架构中说说有哪些常用的设计模式?
图中包含的设计模式:
* delegate (代理模式)
* Notification & KVO (观察者模式)
* target-action(命令模式)
* MVC(中介者模式 ,内置了策略模式)
3、怎么解决iOS打包成功之后,运行在iPhone上会闪退,黑屏的问题?
- 证书的错误,比如用发布证书打App Store的包
- 设备并不在开发者账号里
- 有⼀些闪退, 像ios10的时候, 要我们加的那个访问权限, 如相机的访问,就是在plist⽂文件⾥面加上.
4、说一说OC中字典的实现原理?
- ⼤部分语言字典的底层是⼀个哈希表
- 哈希表(本质就是一个数组)
- 哈希函数:md5,哈希算法,SHA1
5、iOS中的消息发送机制和消息转发机制的区别?
- 消息发送机制:使用了运行时,通过selector快速去查找IMP的一个过程
- ⽅法在执行的时候, 编译器会把⽅法编译成objc_msgSend()函数
- 消息转发机制:IMP找不到的时候,通过一些方法做转发处理
6、组件间的通讯,是通过什么方式来做的,请详细的解释一下.
- 采⽤路由的方式, 通过路由的方式来实现模块之间业务的调转, 主工程跟模块之间,不直接引用. 模块与模块之间也不直接引⽤. 直接引⽤的时候, 依赖性会更强. 在中间引⼊的router, 可以降低耦合性。
- router中采用了target_action以及NSInvocation来进行实现,它们其实是一种命令模式。
7、SDWebImage是怎么来清理缓存的?
清理缓存有两种⽅方式:
* 1.根据时间周期来清理:
步骤:
* 1. 找磁盘缓存目录
* 2. 使⽤⽬录枚举器, 根据传入的key获取缓存文件
* 3. 获取超过7天的文件
* 4. 把超过7天的文件放到⼀个数组⾥面, 统一进行删除
* 5.把没有过期的文件存起来, 并计算文件的总⼤小
- 2.根据定义的磁盘大小清理
步骤:
- 1.如果设置了磁盘的最⼤存储. 最⼤的缓存大于零, 并且当前的缓存⼤小已经⼤于最大的缓存⼤小
- 2.清除缓存, 直到缓存到达最大缓存的一半.
- 3.清除的时候, 虽然图⽚没有过期, 它也会根据时间最⽼的来先删,
8、SDWebImage是怎么处理接收的内存警告的?
- ⽤的是AutoPurgeCache这个类来处理内存警告
- 这个类是继承⾃NSCache.
- 发现内存警告, 就直接removeAllObjects全部清理掉
9、SDWebImage中怎么计算图片的成本大小?
计算图片占用的内存⼤小. 高⽐例因子宽*⽐例因⼦
计算在缓存中的⼤小. 在同步的队列⾥面, 获取图片的路径,拿到图片之后,依次进行叠加.
10、SDWebImage中clear和clean有什么样的区别?
clean 删除缓存,只会删除一部分,根据过期时间和空间大小
clear 整个目录全部删除
答案都是收集而来,如果有什么错误,欢迎指正!