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

最老程序员创业开发实训4---IOS平台下MVC架构

在前面几篇文章中,我们大致研究了一下,在Android平台,以应用开始时的Splash页面为例,讲述了怎样利用MVC架构来实现这一简单功能,有可能有朋友认为,对于这样简单的功能,采用MVC架构有

在前面几篇文章中,我们大致研究了一下,在Android平台,以应用开始时的Splash页面为例,讲述了怎样利用MVC架构来实现这一简单功能,有可能有朋友认为,对于这样简单的功能,采用MVC架构有些过了。但是,如果需求变为,需要根据时间、地点等,显示从服务器上下载的图片,那么我们所采用的架构,就具有一定的优势了。

下面,我们将讲述在IOS平台怎样实现相同的功能。我们知道在IOS平台上开发原生应用,有两种技术可供选择,即Objective-C或Swift。如果对于找工作而言,当前最好的选择依然是Objective-C,原因很简单,目前国内多数公司仍然使用Objective-C进行IOS开发。但是,如果我们做自己的项目的话,我推荐采用Swift,一方面,Swift作为苹果主推的新一代语言,迟早会成为主流;另一方面,同样的功能,Swift实现代码更少,更不容易出错,开发速度更快。因此,在这个系列中,我将以Swift作为IOS的开发语言。在余下的几篇博文中,我将采用Swift开发与Android相同的功能,分别介绍如下内容:IOS平台下MVC架构,Swift语言快速入门、Splash实现。

在开发应用中,我们希望降低系统间耦合,将控制和显示相分离,因此我们通常采用MVC架构。将应用按照控制器、视图、模型来组织,使系统的耦合减少,灵活性增加,更方便于调试和维护。

但是在IOS平台中,系统同样并不强制开发人员采用特定的架构。通常程序员们会觉得IOS平台所有组件都是基于MVC的,我的应用自然就是基于MVC架构的呀!其实这是一种典型的错解,IOS组件是基于MVC的不假,但是你的程序在IOS中既保存着从网络获取到的数据,又负责页面更新和显示,同时还有业务逻辑,我时程序员通常将这些功能都添加到ViewController中。但是,从ViewController的名字可以看出,其是View和controller的结合体,将Moel数据也放入其中,显然是不合适的。

IOS平台下,MVC架构图如下所示:

IOS平台MVC架构

对于IOS平台而言,尤其是Swift语言,其实设计者虽然没有指名采用什么应用架构,但是在构建系统时,显然是以MVC为指导思想的。在IOS平台中,我们首先遇到的是UIViewController的子类,这在MVC架构基本等价于控制器(Controller),但是与标准的MVC架构有所不同,在ViewController中,实际上结合部分视图(View)的功能。如上图所示,视图中的所有控件,通过绑定IBOutlet获取控件所对应的变量,这样ViewController从模型中取出数据后,可以通过这些IBOutlet属性,根据数据内容操纵视图(View)将这些数据显示到界面上。当用户在界面中进行交互时,会产生事件,通过绑定的IBAction,可以调用ViewController中对应的事件处理函数,实现对事件的正确响应。

在IOS平台中,视图(View)根据实现方式不同,可能有几种不同的情形。第一种方式下,采用XCode推荐使用的SotryBoard,在这种方式下,视图(View)对应着在StoryBoard中的场景。第二种情况,在应用页面较多的情况下,多数人并不使用StoryBoard,而是创建ViewController的同时创建对应的XIB文件,这时XIB就对应于视图(View)。第三种情况,由于在界面上操作Autolayout和Size是比较麻烦的,而且有一些复杂的情况,仅通过界面是无法实现的,因此实际中,有很多开发人员,直接采用代码来写界面,这时就有了真正的视图(View)类。对各人而言,我比较倾向于第三种方案。在自己实现视图(View)类时,可以直接从模型中取出数据并显示,这也是标准MVC架构的情形,但是为了与另外两种情况兼容,我们仍然采用视图(View)中不从模型中获取数据,与模型(Model)类无任何交互。

在IOS平台中,模型类一般都是自定义的类。当ViewController需要数据时,会调用模型(Model)的相应方法获取数据。当模型数据改变时,模型(Model)不主动调用ViewController。在Swift语言中,通过对属性添加willSet / didSet函数,当属性值发生改变时,会触发这些方法,我些方法会生成对应的事件,并发送到消息总线上去。ViewController对各种感兴趣的消息进行注册,通过Observer模式,实现对特定消息的响应。

以上就是在IOS平台下,MVC架构的基本描述。在下一篇博文中,我将以程序开始时的Splash页面为例,采用Swift来实现这一功能。


华丽的分隔线
******************************************************************************************************************************************************************************
希望大家多支持,有大家的支持,我才能走得更远,谢谢!
银行账号:622202 0200 1078 56128 闫涛
我的支付宝:yt7589@hotmail.com


推荐阅读
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 新浪微博热搜暂停更新;即刻APP回归;Android 11 Beta版发布 | 科技新闻速递
    为您带来最新的科技资讯,涵盖社交媒体动态、软件更新及行业重大事件。CSDN携手您共同关注科技前沿。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • Django与Python及其他Web框架的对比
    本文详细介绍了Django与其他Python Web框架(如Flask和Tornado)的区别,并探讨了Django的基本使用方法及与其他语言(如PHP)的比较。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • 提升工作效率:掌握15个键盘快捷键
    在日常工作中,熟练掌握计算机操作技巧能够显著提升工作效率。本文将介绍15个常用的键盘快捷键,帮助用户更加高效地完成工作任务。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
author-avatar
清潇静凌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有