设计原则
1、单一职责原则
CALayer:动画和视图的显示。
UIView:只负责事件传递、事件响应。
2、开闭原则
对修改关闭,对扩展开放。 要考虑到后续的扩展性,而不是在原有的基础上来回修改。
3、接口隔离原则
使用多个专门的协议、而不是一个庞大臃肿的协议。
UITableviewDelegate
UITableViewDataSource
4、依赖倒置原则
抽象不应该依赖于具体实现、具体实现可以依赖于抽象。 调用接口感觉不到内部是如何操作的。
5、里氏替换原则
父类可以被子类无缝替换,且原有的功能不受任何影响。
6、迪米特法则
一个对象应当对其他对象尽可能少的了解,实现高聚合、低耦合。
了解哪些设计模式、架构
设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。
1、MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。
2、MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。
3、单例模式:通过static关键词,声明全局变量。在整个进程运行期间只会被赋值一次。
4、观察者模式:KVO是典型的通知模式,观察某个属性的状态,状态发生变化时通知观察者。
5、委托模式:代理+协议的组合。实现1对1的反向传值操作。
6、工厂模式:通过一个类方法,批量的根据已有模板生产对象。
MVC、MVVM、MVP
MVC:Model - View - Controller。View与Model直接交互,导致View和Model之间的耦合比较大
MVP:Model - View - Presenter。是MVC的变种,使用Presenter代替了Controller,而且改变了数据留向。View和Model之间不再直接进行交互,而是通过Presenter来进行的。Presenter同时持有View和Model。
优点:整体框架分层清晰,降低了耦合度。
缺点:需要加入Presenter来作为协调Model和View的桥梁,同时也导致了Presenter的臃肿,不利于维护。
MVVM:Model - View - ViewModel。其实是对MVP的一种改进,将Presenter替换成ViewModel,并通过双向数据绑定来实现视图和数据的交互。
优点:使其数据流向更加清晰。
缺点:没有统一实现方式。
MVVM如何实现绑定
用 MVVM 实现一个业务。VC 是入口,VC1 显示 “省” 的列表,VC2 显示省关联的 “市”的列表,VC3 显示市关联的 “县” 的列表。VC 到 VC1,VC1到 VC2,VC2 到 VC3,VC3再跳转到 VC。相关点在于如何设计 ViewModel 和 Model ,以及 VC3 到 VC
Block,NSNotification,delegate,Observer比较
代理是一种回调机制,且是一对一的关系,通知是一对多的关系,一个对向所有的观察者提供变更通知;
效率:Delegate比NSNOtification高;
Delegate和Block一般是一对一的通信;
Delegate需要定义协议方法,代理对象实现协议方法,并且需要建立代理关系才可以实现通信;
Block:Block更加简洁,不需要定义繁琐的协议方法,但通信事件比较多的话,建议使用Delegate;
iOS SDK里面有哪些设计模式的实践?
单例:UIApplication
观察者:KVO
类簇:NSNumber
装饰者模式:分类
命令模式:NSInvocation
享元模式:UITableViewCell
为什么需要组件化?