一、编程中的六大设计准则?

1.繁多职责准则

艰深地讲就是一个类只做一件事

CALayer:动画和视图的显示。
UIView:只负责事件传递、事件响应。

2.开闭准则

对批改敞开,对扩大凋谢。
要思考到后续的扩展性,而不是在原有的根底上来回批改

3.接口隔离准则

应用多个专门的协定、而不是一个宏大臃肿的协定

UITableviewDelegate
UITableViewDataSource

4.依赖倒置准则

形象不应该依赖于具体实现、具体实现能够依赖于形象。
调用接口感觉不到外部是如何操作的

5.里氏替换准则

父类能够被子类无缝替换,且原有的性能不受任何影响
例如 KVO

6.迪米特法令

一个对象该当对其余对象尽可能少的理解,实现高聚合、低耦合

二、如何设计一个图片缓存框架?

能够模拟SDWebImage来实现。

形成
Manager
 内存缓存
 磁盘缓存
 网络下载
Code Manager
 图片解码
 图片解压缩

图片的存储是以图片的单向hash值为Key

内存设计须要思考的问题

存储的 Size
因为内存的空间无限,咱们针对不同尺寸的图片,给出不同的计划

 10K以下的 50个
 100Kb以下的 20个
 100kb以上的 10个

淘汰的策略

内存的淘汰策略采取LRU(最近起码应用算法)

触发淘汰策略的机会有三种

 1.定期检查(不倡议,耗性能)
 2.进步查看触发频率(肯定要留神开销)
…… 1.前后台切换的时候
…… 2.每次读写的时候

磁盘设计须要思考的问题

 存储形式
 大小限度(有固定的大小)
 移除策略(能够设置为 7天或者 15天)

网络设计须要思考的问题

 图片申请的最大并发量
 申请超时策略
 申请优先级

图片解码

利用策略模式,针对jpgpnggif等不同的图片格式进行解码

图片解码的机会

 在子线程图片刚下载完时
 在子线程刚从磁盘读取完时

防止在主线程解压缩、解码,防止卡顿

三、如何设计一个时长统计框架?

首先作为一个开发者,有一个学习的气氛跟一个交换圈子特地重要,这是一个我的iOS开发公众号:编程大鑫,不论你是小白还是大牛都欢送入驻 ,让咱们一起提高,独特倒退!(群内会收费提供一些群主珍藏的收费学习书籍材料以及整顿好的几百道面试题和答案文档!)

记录器

 页面式记录器
 流式记录器
 自定义式

记录管理者

 内存记录缓存
 磁盘存储
 上传器

如何升高数据的失落率?

 定期写入磁盘
 每当达到某个值的时候,就写入磁盘

记录上传的机会

 前后台切换的时候能够上传
从无网到有网切换的时候能够上传

上传机会的抉择

 立刻上传
 定时上传
 延时上传