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


推荐阅读
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文探讨了如何在Swift编程语言中先声明函数,随后再定义其具体实现的方法。 ... [详细]
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社区 版权所有