热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS开发中MVC架构模式的深入解析(第一部分)

在iOS开发中,MVC架构模式是常用的设计模式之一。本文将深入解析MVC架构的第一部分,重点介绍View组件。View组件继承自UIView,主要负责内容的展示(如UILabel等视图类)和用户输入的处理(如UIButton等控件类)。通过详细的代码示例和实际应用,帮助开发者更好地理解和掌握View在MVC架构中的作用和实现方式。

View:继承至UIView,负责展示内容(视图类比如UILabel)、以及接受用户输入Event(控件类比如UIButton)。

1.UIView中的控件类只是接受到了Event,但是它不知道如何响应该Event。Controller知道如何响应。IOS中采取[目标-动作]机制完成响应函数调用。当UIButton接受到用户按下的Event,它便向Controller(Target)发送消息,Controller收到消息后,会执行action。这过程通常在storyboard中手动连线完成。也可以采用编写code(这取决于UI生成的方法,是code创建还是通过storyboard)。在-(void)viewDidLoad中:

 

 

 

 

 

 

 

2. 视图类被用户操作时,需要考虑三个问题will(将要被)、should(可以被) 、did(正在被),要回答这三个问题。视图类委托权利给控制器来处理。

这种两个对象之间的通信方式称为“委托设计模式”。IOS中使用协议如UITextFieldDelgate(相当于其他语言接口)。

protocol:两个对象之间的盲通信。(这里的盲,体现在id是可以指向任意NSObject对象,两个需要通信的对象,都不必了解各自的细节)。

拿代码来说明,典型的视图类包含一个delegate属性:

@interface MyView:UIView

@property(nonatomic,weak)id  delegate;

@end

在控制器中创建这个视图的时候,会进行如下操作:

-(void)viewDidLoad

{

    _nameT = [[UITextField alloc]initWithFrame:CGRectMake(20, 100, 100, 30)];

    _nameT.delegate = self;  //将控制器 设置为 视图类的 委托

    [self.view addSubview:_nameT]; //view拥有对象UITextField,strong

}

这个过程如图所示:

PS:这个过程也解释了

@property (weak, nonatomic) IBOutlet UITextField *textField;

为什么’插座变量’要使用weak,因为控制器视图类相互持有对方的引用。为了避免循环引用带来的memory leak。

 另一种委托模式的应用,叫DataSource。视图不拥有它要显示的数据(比如UITableView),视图需要向控制器请求需要显示的数据。UITableVIewDataSource协议

  1. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  2. -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  3. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Controller: View与Model之间不能直接通信(这样的设计满足程序的数据与显示隔离),需要Controller来在中间协调。各种相关的ViewController(不同的控制器实现了不同种类的协议),主要负责Model 与 View之间的同步。

控制器同时持有,View的引用(IBOutlet)和Model的引用。

Model:利用IOS提供的基础框架,及Objective-C面向对象的技术,对app的业务逻辑建模。如此Model其实就是代表了这个app是什么。

转:https://www.cnblogs.com/rhinoxy/p/4988902.html



推荐阅读
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 深入理解iOS中的链式编程:以Masonry为例
    本文通过介绍Masonry这一轻量级布局框架,探讨链式编程在iOS开发中的应用。Masonry不仅简化了Auto Layout的使用,还提高了代码的可读性和维护性。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 在开发iOS应用时,面对不同状态(如数据加载成功、无数据、未登录、网络异常等)的界面管理,如何实现既高效又美观的用户体验?本文探讨了几种最佳实践方法。 ... [详细]
  • 本文通过具体示例探讨了如何在iOS应用中有效使用scrollView,并解决了常见的无法滚动问题。不仅介绍了基础的使用方法,还详细讲解了代码实现的具体步骤。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
author-avatar
阡蓝fliona
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有