设置主页 加入收藏 保存到桌面
当前位置首页论文计算机论文基于iOS的非绑定式MVVM设计模式与滑动性能优化的应用研究

基于iOS的非绑定式MVVM设计模式与滑动性能优化的应用研究

逍遥诀围观:℉更新时间:2021-12-18 13:19:23

基于iOS的非绑定式MVVM设计模式与滑动性能优化的应用研究

第 1 章 绪 论1.1 课题研究背景近些年来,随着移动互联网技术的更新发展,移动终端也追随着这股浪潮快速地普及。在移动设备领域中,主流的操作系统主要有四个,分别是苹果公司(Apple)推出的 iOS 操作系统、谷歌公司(Google)推出的 Android 操作系统、微软公司(Microsoft)推出的 WindowsPhone 系统以及 Research in Motion(RIM)公司的 Blacberry 系统[1]。下表是 Gartner Group公司发布的2021年第二季度全球智能手机市场份额报告,从表中可以看到Android系统和iOS系统的市场份额已经高达 97.1%,基本已经占领了移动端市场。虽然 iOS 只有 12.9%的市场份额,主要原因是 iPhone 手机的机型单一和价格不菲。即便如此,全球果粉的数量还是不断地增加,原因在于 iOS 操作系统在流畅性、系统的稳定性以及界面的设计上都是其他系统难以媲美的。据统计,2021 年苹果应用商店将近有 300 万款应用,应用商店整合了基于 iOS 开发的客户端软件,一方面保护了开发者们的利益,另一方面方便了用户对应用的搜索[2,3]。人们对于通过手机获取各式各样信息的需求日益增强,追求个性化的界面以及新颖的用户体验[4]。这就导致在 iOS 平台下采用传统 MVC 设计模式时,控制器层(Controller)因为要处理过多的业务逻辑、数据逻辑以及视图相关的逻辑而变得臃肿和难以管理[5]。通常情况下,业务繁多的控制器层中,就有上千条代码,这对代码审查、添加功能以及后期的维护带来了很大的困难。为了解决这个普遍的问题,开发者们在 MVC 的基础上提出了 MVVM 设计模式。MVVM设计模式的目的是将业务逻辑层、数据逻辑层和 UI 逻辑层分离[6],从而让客户端更容易地被开发和测试。然而,MVVM 设计模式也带了一系列的问题:首先,在 iOS 平台下,没有现成的数据绑定机制,需要借助于开源库 ReactiveCocoa,它提供的数据绑定机制会使程序在出现BUG 时难以准确定位异常,这增加了项目的开发成本;其次,在项目中引入第三方开源库,就需要学习另一套编程风格的框架,以至增大学习成本;同时也使软件后期维护的成本增大。.........1.2 国内外研究状况从目前发展趋势来看,开发者对于设计模式相关的问题愈加地重视。MVC 设计模式是Xerox PARC 在二十世纪八十年代为编程语言 Smalltal-80 发明的一种软件设计模式,至今为止,已经被广泛地应用到软件的设计与研发中[8]。然而,随着互联网的快速发展,开发者们已经意识到古老的 MVC 设计模式在面临过多业务逻辑时所展现出的局限性。随之,MVVM设计模式应用而生,它最早是由微软 WPE 和 Silverlight 架构师 ohn Gossman 于 2005 年提出的[9],目的是将视图控制器层中大量对于视图逻辑和数据逻辑迁移到视图模型中,从而减轻视图控制器的负担,同时分离出来的视图模型的可测性得到提升,解决了界面元素难于测试的问题。此外,iOS 平台下的视图滑动性能的问题被很多开发者忽视。国内外的大多数开发者在完成基本功能需求后,并不会细致地分析和优化滑动性能相关的问题,这对客户端应用的打击是致命的,因为苹果应用商店(AppStore)评分系统的存在,这就变相地要求开发者们对客户端应用的设计和实现精益求精。同时,滑动性能问题牵涉的方面广而繁琐,没有统一的标准规范。MVVM 设计模式在许多应用系统中都有成功的案例,它使得控制器层更加轻量级,并且使开发的系统具有更好的可维护性与拓展性。然而,对于 iOS 平台下的视图滑动性能的分析研究却寥寥无几。国内外开发者尝试并成功地将 MVVM 设计模式应用到 iOS 平台下,但多少还有一些水土不服;。由于 iOS 中并没有 MVVM 设计模式所需的数据绑定机制,需要引入第三方开源库 ReactiveCocoa 来支持,从而也带来了一系列的问题。所以如何能将 MVVM 设计模式应用到项目开发中,并且避免 ReactiveCocoa 带来的一系列问题是本文下一步的研究方向,同时对于视图滑动性能问题的探究和解决也迫在眉睫。........第 2 章 iOS 平台下设计模式分析与改进随着移动互联网蓬勃快速地发展,以及移动智能终端的普及,人们对于通过手机获取各式各样信息的需求日益增加,并追求个性化的界面以及新颖的用户体验。用户的需求使得在iOS平台下采用传统MVC设计模式进行开发时,控制器层因为要处理过多的业务逻辑、数据逻辑以及视图相关的业务,变得臃肿和难以管理维护。它带来的直接后果就是在修改程序、添加功能和审查代码时,面对臃肿的控制器层,我们无从下手。引入MVVM设计模式的目的是为了将业务逻辑层、数据逻辑层和UI逻辑层分离,让程序更容易地被开发和测试。该设计模式依赖于第三方开源库ReactiveCocoa提供的数据绑定机制来完成视图层和模型层的数据同步,然而它使应用程序无法快速追踪到异常的位置,同时增大了学习、开发以及后期维护的成本。本章首先从传统的MVC模式入手,介绍传统MVC设计模式,其次阐述它与MVVM的区别以及MVVM设计模式存在的弊端,最后在原有MVVM基础之上提出一种非绑定式MVVM设计模式这一改进方案。2.1 传统 MVC 设计模式Xerox PARC 在二十世纪八十年代提出了 MVC 设计模式,目的是为 Smalltal-80 这门编程语言发明一种软件设计模式,至今已被广泛应用到软件设计与研发中[11]。它是模型层(Model)-视图层(View)-控制器层(Controller)的缩写,是一种软件设计典范。它主要是以一种数据、界面、业务逻辑显示分离的方法组织代码,将业务逻辑放在一个部件里,在更新和制定个性化界面以及与用户发生交互时不用重新修改相关的业务逻辑代码。模型层(Model):模型层是问题的抽象,封装了数据和数据处理的方法,主要用于和数据库交互。模型层的存在避免了代码的冗余,与此同时,也适度减轻了开发者的工作[12]。视图层(View):视图层提供给使用者交互界面,它主要的任务是与应用使用者进行交互,并将用户请求传达给控制器层。控制器层(Controller):控制器层是视图层和模型层之间沟通的桥梁。其中包含相应的业务逻辑、数据逻辑以及视图相关业务[13]。MVC 也有人称它为 Massive View Controlle(r重量级视图控制器),这是因为在采用 MVC设计模式进行开发时,控制器层因为承载了过多的业务逻辑、数据逻辑以及视图相关业务,变得臃肿和难以管理。这导致在修改程序、添加功能和审查代码时,显得困难和无力。........2.2 MVVM 设计模式MVVM(Model-View-ViewModel)设计模式最早是由微软 WPF 和 Silverlight 架构师 ohnGossman 于 2005 年提出的。在 iOS 开发实践中,通常会把传统 MVC 设计模式中视图控制器(ViewController)里大量的对于视图逻辑和数据逻辑迁移到视图模型(ViewModel)中,从而减轻了视图控制器(ViewController)的负担。并且,分离出来的视图模型层的可测性得到了提升,解决了视图元素难于被测试的问题。MVVM 分别由 Model(模型层)、View(视图层)和 ViewModel(视图模型)三部分组成[14]。其结构如图 2.2 所示:模型层(Model):它是问题的抽象,主要保存与视图相关的数据。视图层(View):它包括视图和视图控制器,主要是为了展示视图内容和如何展示视图内容。视图模型层(ViewModel):主要是处理视图逻辑,请求和解析数据,以及与用户交互的业务逻辑。这里,通过ReactiveCocoa提供的数据绑定机制来实现模型层和视图模型层以及视图层和视图模型层之间的数据同步。在MVVM设计模式中,趋于将视图和视图控制器作为一个整体V,而视图模型代替MVC中视图控制器协调视图和模型之间的交互[15],并且出于低耦合高内聚;[16]的原则,我们至少需要为每一个视图控制器或视图配备一个视图模型。模型变化对于视图模型的更新操作则依赖于ReactiveCocoa的绑定机制,视图和视图模型之间亦是如此。............第 3 章 iOS 平台下滑动性能分析与调优..........113.1 八大影响滑动性能的元凶.... 113.2 滑动性能调优......193.3 频繁算高优化......223.3.1 RunLoopMode .....223.3.2 算高时机选择与预缓存机制........233.4 本章小结.....24第 4 章 基于 iOS 的智慧小区平台总体设计.....254.1 需求分析.....254.1.1 功能性需求分析..........254.1.2 非功能性需求分析......264.2 总体设计方案......274.2.1 平台总架构图.....274.2.2 系统总体功能结构......274.3 本章小结.....29第 5 章 基于 iOS 的智慧小区平台详细设计与实现...........305.1 数据持久层设计与开发........305.2 非绑定式 MVVM 设计模式的应用.......345.3 功能模块实现......365.4 本章小结.....44第 5 章 基于 iOS 的智慧小区平台详细设计与实现根据上一章的总体设计方案,本章对客户端的各个方面进行了详细设计与实现。重点阐述了数据持久层设计与开发、非绑定式 MVVM 设计模式的应用以及各功能模块的具体实现。5.1 数据持久层设计与开发本系统的数据持久层主要包括本地数据的缓存和访问网络数据的请求与缓存两部分[41]。当首次启动应用时,它采用 AFNetworing 框架异步地向服务器请求启动屏广告相关数据,然后再将相关的数据保存到本地,方便再次启动应用时频繁地请求数据。这里涉及到相关的图片缓存加载机制与模型对象的缓存。而对于用户账户密码的本地持久化,需要保证它的安全性,所以需要使用到苹果公司提供的钥匙串机制[42]。相关的数据库设计会在下文中介绍。5.1.1 账户密码持久化存储钥匙串服务为开发者们提供了一种安全存储信息的方式,通常用它来存储一些比较敏感的信息,例如用户的账户密码。苹果公司为开发者们提供了这样的服务,只要通过简易地调用钥匙串服务接口,应用即可将登陆信息存储到钥匙串中。钥匙串其实就是一个加密的容器,它为不同的应用和安全服务保存信息,当它被锁住的时候,任何人都不能访问其保护的内容。在 MacOS 系统中,用户可以通过输入系统密码,让程序获得访问钥匙串内容的权限。而在 iOS系统中,通常情况下每个应用都只能访问自己应用的钥匙串内容,永远都不能解锁钥匙串,这是出于安全性的考虑而设计的。在使用钥匙串服务时,主要使用的基本服务有:添加密码到钥匙串、修改已存在的钥匙串内容、读取保存的钥匙串内容等。一般情况下,开发者使用苹果公司提供的钥匙串类eyChainItemWrapper 来进行相关的加密操作,使用的步骤是:首先将封装好的类添加到工程,然后创建一个钥匙串对象,再进行相关的存储和读取操作。需要注意的是,钥匙串的使用类似于以键值对(ey-Value)存储的字典对象,所以在存储时要使用系统提供的 ey 值。相关使用的代码如下图 5.1 和 5.2 所示:

.......总结本论文基于 iOS 平台,并以实验室智慧小区平台项目为支撑,主要研究分析了当前 iOS平台下设计模式的利弊,提出了一种基于传统MVVM设计模式的非绑定式MVVM设计模式;同时,针对开发人员对于视图滑动性能的忽视,本论文研究分析了影响视图滑动性能的各个因素,并针对各个因素提出相应的解决方案。此外,还设计实现了智慧小区平台的移动客户端,并将上述中的非绑定式 MVVM 设计模式以及滑动性能优化运用其中。主要工作和成果可以总结为以下几点:(1)重点分析了当前 iOS 平台下开发编码时采用的传统 MVC 和 MVVM 设计模式,并总结得出现有设计模式的一系列弊端。同时,在现有 MVVM 设计模式的基础上,提出通过引入数据管理层(DataManager)并配合原生的代理回调技术来替换传统 MVVM 设计模式引入的 ReactiveCocoa 开源框架,从而避免由于该框架带来的一系列弊端。(2)重点研究了影响滑动视图性能的八大元凶;:图层混合、光栅化、图片的格式、变化区域、离屏渲染、图片加载、列表内存以及算高机制,分析这些元凶;产生的原因,并且提出了相应的解决方案。(3)分析研究了客户端数据持久层的设计和开发。主要从用户的账户密码的加密存储、视图的模型对象缓存和数据库的设计方面来实现对于不同需求的持久化,提供不同的解决方案。分别采用钥匙串技术,NSeyedArchiver 归档技术来实现。(4)对智慧小区平台移动客户端的需求进行分析,并提出相应的总体设计方案。同时对客户端进行详细的设计和实现,主要包括:数据持久层的设计与开发、非绑定式 MVVM 设计模式在项目中的应用、各个功能模块的实现。功能模块包括:启动屏广告、登录、主界面、报修、投诉提议、通知、常用电话、大杂烩以及个人中心模块。(5)在实现完成客户端的各个功能模块后,本文对客户端进行了相关的测试工作,测试工作主要包括:UI 测试、网络请求相关测试、数据库相关测试、算高优化测试等。并使用苹果公司提供的测试工具集中的工具,对滑动性能进行测试。经过多次相关的测试之后,进行相关内容的修改和完善,最终达到了预期的目标。..........参考文献(略)