美文网首页闻道丶iOS(大杂烩)
iOS MVC与MVVM的简述与应用

iOS MVC与MVVM的简述与应用

作者: RunnerFL | 来源:发表于2016-11-14 17:57 被阅读136次

MVC模式

mvc是前两年使用较为宽泛的设计模式,甚至宽泛到又一次我面试说熟悉它,面试官竟说它也算设计模式,在此我想回敬一句,是不是所有人都用苹果手机,iOS就不叫操作系统了呢???哈哈😄,言归真转

MVC即字面意思为model、view、controller,其用意在于将数据与视图分离开来,

model:模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。

view:视图对象是应用程序中用户可以看见的对象。视图对象知道如何将自己绘制出来,可能对用户的操作作出响应。视图对象的主要目的就是显示来自应用程序模型对象的数据,并使该数据可被编辑

controller:在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象的更改,反之亦然。控制器对象还可以为应用程序执行设置和协调任务,并管理其他对象的生命周期

m、v、c之间的关系

如图一所示:

图-

model与view之间不可通信,


View 与 Controller 的关系是十分紧密的,他们之间可以双向通信。

Controller 可以直接操作 View。在使用 Storyboard 进行界面设计时,我们可以直接拖拽现有的控件(View),再通过 Controller—Drag 就可以为各种 控件生成一种类似于句柄的 outlet来作为 ViewController 的属性,ViewController 通过 outlet 来对 View 进行操作,设置其外观、状态或者行为等等。如果是通过纯代码来编写界面,ViewController 类中就包含了控件的实例,直接通过这些实例的指针进行操作即可。

View 可以通过特殊的方式来发消息给 Controller。因为系统自定义的 View 并不知道当用户进行操作之后,Controller 需要做些什么,为了减少耦合性,采用了一些特殊的方式来与 Controller 进行通信。通信的方式有:

IBAction。通过 Controller—Drag,XCode 会自动生成事件的响应方法。也可以使用 (void)addTarget:(id)target action:(SEL)action 方法来注册事件的响应方法。

DataSource。当系统的某些 View 在呈现时需要我们提供相应的数据。我们必须为 View 指定 DataSource,并实现相应的 DataSourceProtocol(所谓的 Protocol 是指预先定义好的一组回调函数,其中的部分是必须实现的,部分是可选的。)最典型的是 UITableView,我们必须告诉系统这个 TableView 有多少行,每行的 Cell 内容是什么。

Delegate。它也是一组 Protocol,系统会在特定事件(如网页的跳转、网页加载)发生的前后来调用这些方法。View 可以在不知道某个类的细节的情况下,把该类设置成自己的 Delegate,只要目标类实现了 Protocol 中的必须实现的方法。这些 Protocol 中的方法的命名是有规律的,通常会包含三种关键字:

will: 表示这个方法会在某种事件 发生前 调用。

did: 表示这个方法会在某种事件 发生后 调用。

should: 通常用来确定 该不该让某件事发生 。如 webView:shouldStartLoadWithRequest:navigationType: ,它的返回值是布尔型,当返回 NO 时,WebView 将不会加载内容。

Model 与 Controller

Controller 直接向 Model 请求数据。一般将 Model 的类作为 Controller 的属性,直接调用相应的实例方法或者类方法即可。

Model 通过 Notification 和 KVO 将数据的变化通知给 Controller。KVO 是指 Key-value observing,是一种观察者模式的实现,可以使得 Controller 在 Model 的数据变化时能够得到通知。Notification 是另外一种系统提供的通知机制,与 KVO 的直接通知到观察者对象不同,系统提供了一个 NotificationCenter 来广播通知。两者都可以实现一对一或一对多的关系。

白胡子老头 mvc 的demo便于理解。如果嫌麻烦,本人谢了几行代码,可以看一下demo

mvvm浅析

本来打算自己写,查资料时发现了这篇博文非常不错,就直接拿来主义了

来自


http://mobile.51cto.com/iphone-475071.htm###

附带demo 

相关文章

  • iOS MVC与MVVM的简述与应用

    MVC模式 mvc是前两年使用较为宽泛的设计模式,甚至宽泛到又一次我面试说熟悉它,面试官竟说它也算设计模式,在此我...

  • iOS开发学习笔记:对MVC、MVVM建立认识

    本文参考: iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译) 浅谈 MVC、MVP...

  • iOS最新大厂面试题整理

    iOS开发面试梳理(一) OC的理解与特性简述内存管理基本原则如何理解MVC设计模式如何理解MVVM设计模式Obj...

  • MVC、MVP、MVVM

    MVC MVP MVVM 各种大神博客介绍:唐巧:被误解的 MVC 和被神化的 MVVM 组件化讨论《iOS应用架...

  • mvvm + RxSwift

    mvvm 设计模式 与mvc 相比的优势 http://www.cocoachina.com/ios/201709...

  • iOS MVVM与MVC

    MVC MVC结构图 从图中我们可以看出控制器(Controller)主要负责数据的交互和与视图的交互,模型(Mo...

  • 基础知识梳理

    iOS基础 1.mvc、mvvm iOS 关于MVC和MVVM设计模式的那些事 2.autoReless 自动释放...

  • MVVM in Swift

    参考文章: MVVM in Swift MVC 与MVVM的区别在MVC下ViewController中常常会包含...

  • iOS面试题集合

    1.介绍iOS设计模式MVC,MVVM, MVP以及它们之间的区别? 2.简述内存管理 3.#import和#in...

  • iOS MVVM架构总结

    参考:iOS 中MVC设计模式iOS MVVM架构iOS MVVM-框架介绍iOS 架构模式MVVM的实践总结iO...

网友评论

    本文标题:iOS MVC与MVVM的简述与应用

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