iOS 面试 - 架构与设计

设计原则

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

为什么需要组件化?

你可能感兴趣的:(iOS 面试 - 架构与设计)