基于BaaS服务的iOS平台美食分享系统设计与实现
2015-09-26张进飞黄晓霞
张进飞,黄晓霞
(上海海事大学信息工程学院计算机系,上海 201306)
基于BaaS服务的iOS平台美食分享系统设计与实现
张进飞,黄晓霞
(上海海事大学信息工程学院计算机系,上海201306)
0 引言
得益于移动4G技术推广,人们使用移动互联网更加便利。当移动互联网与餐饮行业结合在一起时,市场前景十分诱人,在此行业处于领先地位的企业,估值已达几十亿美元[1]。这个方向可以做许多事情,如订餐、美食推荐、团购、点评等。
本系统以美食推荐作为入口,利用iOS设备提供的定位功能,向用户推送当前所处位置周边范围内其他用户分享的美食信息,使用户了解身边的美食,以提供更多的选择。
1 开发平台及技术
系统采用Objective-C编程语言开发。Objective-C是编写OS X和iOS平台软件的主要语言,它是C语言的一个超集,提供面向对象编程和动态运行时。开发工具采用Xcode 6.1,它包含iOS 8.1 SDK,可直接用于开发iOS程序。数据的服务器端保存使用到BaaS服务。BaaS(Backend as a Service)是一种新型的云服务,它使用统一的API和SDK来连接移动应用到后端云存储,通过云来集成后端服务[2]。本系统采用AVOS公司提供的LeanCloud服务[3]。
2 运用BaaS服务处理数据
通过LeanCloud云服务,系统实现数据的保存与查询获取十分方便和可靠。
在LeanCloud上,使用AVObject对象进行数据存储,在使用时,不需提前指定AVObject对象包含哪些键,只需在使用时直接设定键值即可[4]。
(1)保存对象
首先建立AVObject对象,为该对象设置键值,然后调用AVObject的保存方法保存:
在LeanCloud上,查询使用的是AVQuery对象,首先需要指定查询的类名称以初始化该对象,然后设定查询条件:
3 针对UITableView类的性能与界面优化
UITableView类在iOS开发中使用频率非常高,iOS系统自身的软件如时钟、日历、Mail等均使用此视图。在本系统中,首页的数据展示、个人分享历史中均用到UITableView。
为了节省内存,iOS系统中UITableView采用重用cell的方法,这也容易造成子视图重叠错乱的问题。此外,UITableView在加载图片时还面临下载图片阻塞系统UI主线程、图片加载过多导致系统内存占用过多等问题[5]。
本系统为解决上述几个问题,运用到多线程、本地缓存以及使用缩略图等技术。
在2.2节查询方法中不再使用[query findObjects],这会阻塞UI主线程,改为后台查询方法。
通过上传信息时生成缩略图,在信息流中显示占用内存空间几k大小的缩略图替代可能上百k的原始图片。这样既减少内存的占用,又避免下载信息时等待时间过长使得用户体验较差。生成缩略图方法:
通过这种方法,上百k大小的图片可以缩小至10k以内。
原始图片数据通过file id下载,并将它缓存至本地文件系统:
对于获取到的NSdata格式数据,调用存储对象ZJFImageStore的实例方法
将数据保存到本地文件系统。类ZJFImageStore的imagePathForKey:(NSString*)方法根据传入的参数,生成本地存储文件的路径。属性 imageStore是 NSMutableDictionary对象,在将data数据存储至文件系统的同时将数据保存在字典对象imageStore中。
下次请求加载图片时,先检查imageStore中是否已存在数据对象,因为imageStore对象本身保存在内存中,所以可以直接从内存中完成加载。否则,缓存则尝试本地文件系统加载数据,如果本地文件系统也没有此数据,则根据fileId利用本节中描述的数据存取方法获取数据。
将图片信息保存在imageStore字典对象中的另一个好处是,在遇到低内存状况时可以方便地清除这些已加载的资源。
当下一次检索请求到达时,缓存重新加载保存即可。
4 结语
系统开发过程使用BaaS云服务作为数据的永久性存储解决方案,可以降低应用开发成本。作为移动应用开发者,可以在开发初期尝试使用这项服务。另外,作为一款iOS应用,内存管理与应用体验是开发者需要关心的核心问题,本系统通过运用本文提出的解决方法,最终形成一款易用可靠的iOS美食分享系统。
[1]美团VS饿了么:餐饮界“老大”头衔争夺战http://money.163.com/15/0228/08/AJHCSBDJ00253G87.html.
[2]BaaS服务的定义、发展以及未来http://www.infoq.com/cn/articles/the-definition-development-and-future-of-baas-services.
[3]About LeanCloud https://leancloud.cn/about.html.
[4]Joe Conway,Aaron Hillegass等著.iOS编程.夏伟频译.武汉:华中科技大学出版社,2013.3.
[4]IOS/OS X数据存储开发指南https://leancloud.cn/docs/ios_os_x_guide.html.
[5]黄天柱.iOS开发UITableView加载图片的内存管理.计算机系统应用,2012,21(9):113-118.
iOS;BaaS;UITableView;Cache
Design and Implementation of Food Share System on iOS Platform Based on BaaS Service
ZHANG Jin-fei,HUANG Xiao-xia
(Department of Information Engineering Shanghai Maritime University,Shanghai 201306)
1007-1423(2015)19-0078-03
10.3969/j.issn.1007-1423.2015.19.019
张进飞(1991-),男,安徽宿州人,本科,在读硕士,研究方向为iOS开发、推荐系统
2015-04-23
2015-05-19
该系统是一款iOS平台的美食分享系统,旨在利用iOS设备的定位功能为用户提供周边的美食信息,满足用户通过这款应用发现周边美食的需求。系统利用BaaS服务保存和获取数据,并运用本地缓存、缩略图等方法解决UITableView类的内存管理和页面加载问题。
iOS;BaaS;UITableView;缓存
黄晓霞(1968-),女,甘肃天水人,博士,副教授,研究方向为嵌入式系统、计算机原理
The system is an iOS gourmet share system,aims to use iOS devices positioning function to provide users with the surrounding food information,meets the need of users to find nearby food..The application uses BaaS service to save and retrieve data,and uses the method of local caching,thumbnail to solve the problem of the memory management and page load of the UITableView class.