美文网首页
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面试---常用架构简介

    为什么说Objective-c是一门动态的语言? 1.动态类型:即运行时再决定对象的类型。简单说就是id类型,任何...

  • iOS好文整理

    大神: iOS_吴白iOS大全_破船之家sunnyxx 架构,多线程,源码 面试 ----iOS 面试常见问题最全...

  • iOS开发 如何使用viper架构构建复杂页面?

    iOS开发 使用viper架构构建复杂页面 iOS开发常用的页面架构: MVC MVVM VIPER viper模...

  • iOS架构模式(MVC/MVCS/MVP/MVVM/VIPER)

    简介 谈起iOS架构, 也许你直接想到的就是MVC,MVVM等等. 其实这是不准确的, iOS架构包含的内容有很多...

  • 理论知识

    iOS 系统架构和常用框架 (iOS开发篇)https://blog.csdn.net/m_miao001/art...

  • 推荐系统

    推荐系统基础 推荐系统简介 了解推荐相关常用概念 知道推荐系统的工程架构和算法架构 知道推荐系统的常用算法 知道协...

  • iOS开发专题分类大全(简书iOS学习资源大收录!)

    序言 系统的整理iOS开发常用的第三方库、架构、进阶、面试学习书籍资源等,如果有更好的三方库、没有整理到、可以评论...

  • CocoaPod 常用命令

    CocoaPod 常用命令 简介 CocoaPods 是 iOS 非常常用的类库管理工具 作为 iOS 程序员,掌...

  • iOS日志操作与开发,你真的会重视吗???

    iOS中常用日志和上报系统浅析 类CocoaLumberjack日志框架架构浅析 Crash的类型介绍和常用收集方...

  • iOS架构

    这里说几个概念:iOS系统框架:iOS系统架构:iOS架构:iOS 代码架构:iOS架构师:iOS架构设计: iO...

网友评论

      本文标题:iOS面试---常用架构简介

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