iOS面试题(一)

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经典的架构中说说有哪些常用的设计模式?

    图片 1.png
    图中包含的设计模式:
  • 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. 找磁盘缓存目录
    1. 使⽤⽬录枚举器, 根据传入的key获取缓存文件
    1. 获取超过7天的文件
    1. 把超过7天的文件放到⼀个数组⾥面, 统一进行删除
  • 5.把没有过期的文件存起来, 并计算文件的总⼤小

  • 2.根据定义的磁盘大小清理
    步骤:
  • 1.如果设置了磁盘的最⼤存储. 最⼤的缓存大于零, 并且当前的缓存⼤小已经⼤于最大的缓存⼤小
  • 2.清除缓存, 直到缓存到达最大缓存的一半.
  • 3.清除的时候, 虽然图⽚没有过期, 它也会根据时间最⽼的来先删,

8、SDWebImage是怎么处理接收的内存警告的?

  • ⽤的是AutoPurgeCache这个类来处理内存警告
  • 这个类是继承⾃NSCache.
  • 发现内存警告, 就直接removeAllObjects全部清理掉

9、SDWebImage中怎么计算图片的成本大小?

  • 计算图片占用的内存⼤小. 高⽐例因子宽*⽐例因⼦

  • 计算在缓存中的⼤小. 在同步的队列⾥面, 获取图片的路径,拿到图片之后,依次进行叠加.

10、SDWebImage中clear和clean有什么样的区别?

clean 删除缓存,只会删除一部分,根据过期时间和空间大小
clear 整个目录全部删除

答案都是收集而来,如果有什么错误,欢迎指正!

猜你喜欢

转载自www.cnblogs.com/WinJayQ/p/9106353.html