iOS面试---常用架构简介

  • 为什么说Objective-c是一门动态的语言?

1.动态类型:
即运行时再决定对象的类型。简单说就是id类型,任何对象都可以被id指针所指,只有在运行时 才能决定是什么类型。像内置的明确的基本类型都属于静态类型(int、NSString等)。静态类型在编 译的时候就能被识别出来。所以,若程序发生了类型不对应,编译器就会发出警告。而动态类型就编译器编译的时候是不能被识别的,要等到运行时(run time),即程序运行的时候才会根据语境来识别。所以这里面就有两个概念要分清:编译时跟运行时。

2.动态绑定:
基于动态类型,在某个实例对象被确定后,其类型便被确定了。该对象对应的属性和响应的消息也被完全确定,这就是动态绑定。比如我们一般向一个NSObject对象发送-respondsToSelector:或者 -instancesRespondToSelector:等来确定对象是否可以对某个SEL做出响应,而在OC消息转发机制被触发之前,对应的类 的+resolveClassMethod:和+resolveInstanceMethod:将会被调用,在此时有机会动态地向类或者实例添加新的方 法,也即类的实现是可以动态绑定的;isKindOfClass也是一样的道理。

3.动态加载:
所谓动态加载就是我们做开发的时候icon图片的时候在Retina设备上要多添加一个张@2x的图片,当设备更换的时候,图片也会自动的替换。

  • 讲一下MVC和MVVM以及MVP

MVC全名是Model View Controller

  • 数据关系
    1、View 接受用户交互请求
    2、View 将请求转交给Controller
    3、Controller 操作Model进行数据更新
    4、数据更新之后,Model通知View更新数据变化
    5、View 更新变化数据
  • 方式
    所有方式都是单向通信
  • 结构实现
    1、View :使用 Composite模式 (组合模式)
    2、View和Controller:使用 Strategy模式(策略模式 )
    3、Model和 View:使用 Observer模式同步信息
  • 使用
    MVC中的View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。

MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。

  • MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
  • 数据关系
    1、View 接收用户交互请求
    2、View 将请求转交给 Presenter
    3、Presenter 操作Model进行数据更新
    4、Model 通知Presenter数据发生变化
    5、Presenter 更新View数据
  • MVP的优势
    Model与View完全分离,修改互不影响
    更高效地使用,因为所有的逻辑交互都发生在一个地方—Presenter内部
    一个Preseter可用于多个View,而不需要改变Presenter的逻辑(因为View的变化总是比Model的变化频繁)。
    更便于测试。把逻辑放在Presenter中,就可以脱离用户接口来测试逻辑(单元测试)
  • 方式
    各部分之间都是双向通信
  • 结构实现
    1、View :使用 Composite模式
    2、View和Presenter:使用 Mediator模式
    3、Model和Presenter:使用 Command模式同步信息
  • MVC和MVP区别
    MVP与MVC最大的一个区别就是:Model与View层之间倒底该不该通信(甚至双向通信)

MVVM是Model-View-ViewModel的简写。

  • 数据关系
    1、View 接收用户交互请求
    2、View 将请求转交给ViewModel
    4、ViewModel 操作Model数据更新
    5、Model 更新完数据,通知ViewModel数据发生变化
    6、ViewModel 更新View数据
  • 方式
    双向绑定。View/Model的变动,自动反映在 ViewModel,反之亦然。
  • 使用
    可以兼容你当下使用的 MVC/MVP 框架。
    增加你的应用的可测试性。
    配合一个绑定机制效果最好。
  • MVVM优点
    MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点:
  1. 低耦合。View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
  3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,生成xml代码。
  4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

-参考文章:
【框架篇】mvc、mvp、mvvm使用关系总结
为什么说OC是动态语言

你可能感兴趣的:(iOS面试---常用架构简介)