iOS MVC

这两天看斯坦福大学的iOS公开课,讲到MVC模式,发现以前理解的有点肤浅。刚好看到唐巧的12年的一片文章里面的片段,顺手偷来了。

地址:http://blog.devtang.com/2012/02/05/mvc-in-ios-develop/

正文:

iOS 的 MVC 模式

MVC 模式算是客户端类程序使用的设计模式的标配了。iOS 对于 Model, View 和 Controller 之间的相互调用有它自己的规范和约定,在公开课的 第一课 中,就介绍了应该如何将 MVC 模式应用在 iOS 开发中。主要的内容就体现在如下这张图中 (图片来自该公开课第一课的 配套 pdf 的第 37 页):


我下面详细介绍一下这幅图的意思。

首先图中绿色的箭头表示直接引用。直接引用直观来说,就是说需要包含引用类的申明头文件和类的实例变量。可以看到,只有 Controller 中,有对 Model 和 View 的直接引用。其中对 View 的直接引用体现为 IBOutlet。

然后我们看 View 是怎么向 Controller 通讯的。对于这个,iOS 中有 3 种常见的模式:

设置 View 对应的 Action Target。如设置 UIButton 的 Touch up inside 的 Action Target。

设置 View 的 delegate,如 UIAlertViewDelegate, UIActionSheetDelegate 等。

设置 View 的 data source, 如 UITableViewDataSource。

通过这 3 种模式,View 达到了既能向 Controller 通讯,又不需要知道具体的 Controller 是谁是目的,这样就和 Controller 解耦了。

最后我们看 Model。Model 在图上有一个信号塔类似的图形,旁边写着 Notification & KVO。这表明 Model 主要是通过 Notification 和 KVO 来和 Controller 通讯的。关于 Notification:

// 监听通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(<#methodName#>) name:kLoginNotification object:nil];

// 取消监听

[[NSNotificationCenter defaultCenter] removeObserver:self];

// 发送通知

NSDictionary * userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:200] forKey:@"code"];

[[NSNotificationCenter defaultCenter] postNotificationName:<#notification_name#> object:self userInfo:userInfo];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、MVC 从字面意思来理解,MVC 即 Modal View Controller(模型 视图 控制器),是 X...
    _YZG_阅读 7,590评论 1 42
  • 本文,包含了关于MVC的如下内容: 一、MVC介绍二、MVC的改进三、MVVM简评 一、MVC的介绍 MVC,全称...
    doudo阅读 4,241评论 0 0
  • MVC是我们常用的架构设计模式把类按照功能划分为Model(数据模型)、View(视图)、Controller(控...
    追梦赤子心Year阅读 6,509评论 1 3
  • //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄 1. MVC 的概念 MVC全名是Model Vi...
    石虎132阅读 4,704评论 0 16
  • 首先,1.MVC,全称是:Model View Controller ,是模型、视图、控制器。是一种常见的客户端软...
    1693c7e88afe阅读 3,685评论 2 2

友情链接更多精彩内容