美文网首页
iOS面试---常用架构简介

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

作者: 爱吃鱼的小灰 | 来源:发表于2018-03-06 09:51 被阅读57次
    • 为什么说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面试---常用架构简介

          本文链接:https://www.haomeiwen.com/subject/ifjmxftx.html