热门标签 | 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



推荐阅读
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • MVVM架构~mvc,mvp,mvvm大话开篇
    返回目录百度百科的定义:MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:ControllerPresenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模 ... [详细]
  • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
  • 优化升级版数据采集与赋值方法,专为前文内容设计
    在前一篇文章中,方法的局限性主要体现在需要传递参数,并且参数数量受限。当页面布局与所需参数不匹配时,该方法将无法正常工作。为此,我们推出了优化升级版1.1,旨在解决这些问题并提高灵活性和适用性。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • ZTree工具类全面汇总:实现节点的增删改及后台提交功能
    本文全面总结了ZTree工具类的使用方法,详细介绍了如何实现节点的增加、删除、修改以及后台数据提交等功能。通过实例代码和具体操作步骤,帮助开发者高效地掌握ZTree的各类操作,提升开发效率。此外,还提供了常见问题的解决方案,如在SpringBoot集成X-admin2.2时遇到的Layui字体图标显示问题。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 利用C#技术实现Word文档的动态生成与编辑
    本文通过一个简单的示例,介绍了如何使用C#语言实现Word文档的动态生成与编辑功能。文章详细阐述了在项目中引用Word动态库的方法,并通过具体代码示例展示了如何创建和操作Word表格。此内容旨在为初学者提供参考和学习资料,欢迎读者提出宝贵意见和建议。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • 地图集成方法与应用 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • ASP11:深入解析与应用展望本文详细探讨了 ASP11 中的 `AppRelativeTemplateSourceDirectory` 属性,该属性用于获取或设置包含控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。此外,文章还介绍了 1.0 版本中的 Binding 机制,分析了其在实际开发中的应用和优化方法,为开发者提供了全面的技术指导。 ... [详细]
  • 本文探讨了如何在社交媒体平台上高效地获取和管理好友列表。通过分析当前流行的社交应用,如微信、Facebook等,提出了一系列实用的方法和技巧,帮助用户优化好友管理流程,提升社交体验。文章还介绍了相关工具和插件,以进一步简化操作步骤,确保用户能够快速、准确地管理和维护好友关系。 ... [详细]
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社区 版权所有