《基于iOS的手机应用开发―去哪吃‖的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于iOS的手机应用开发―去哪吃‖的设计与实现.doc(34页珍藏版)》请在三一办公上搜索。
1、 基于iOS的手机应用开发“去哪吃”的设计与实现摘 要 中国是一个拥有五千年的饮食文化的大国,随着现在人们的生活方式的转变,饮食已经成为了一种时尚,实时实地地了解身边的美食已经成为一种十分必要的趋势。因此,开发设计一款“去哪吃”的手机应用软件具有非常高的实用价值。 “去哪吃”由地图定位功能模块、商业菜系模块、美食专辑模块、美食分享模块、好友动态模块等五大模块组成。商业菜系模块罗列出了所有的商业酒店菜系信息;美食专辑模块展现不同地区的美食信息;美食分享模块分享自己喜欢的美食;好友动态模块实现实时查看好友的动态。本文设计的“去哪吃”产品,通过手机可随时掌握、了解和发现身边的美食信息。通过测试后本系
2、统能够稳定运行,实现了设计的所有功能。【关键词】美食搜索;移动互联;iOSDesign and Implementation of Where to Eat Based on IOS MobileAbstract Chinese is a five thousand years of food culture of the country, as peoplelifestyle changes, diet has become a kind of fashion, real time to knowFood has become a necessary trend. Therefore, th
3、e development of the design of a where to eat mobile phone application software has very high practical value. Where to eat composed of map positioning module, module, Foodcommercial cuisine album module, Food sharing module, the friend dynamic module five big modules. Commercial cuisine module list
4、sinformation all The Commercial Hotel cuisine; Food album module showdifferent regions of the Food information; Food sharing module to share their love of friends Food; dynamic module to realize the dynamic real-timeview friends. In this paper, the design of where to eat products, themobile phone ma
5、y at any time to grasp, understand and found around theFood information. By testing the system can run stably, realizing all the functions of the design.【Key words】Food search;Mobile Internet;iOS目 录1 绪论11.1 “去哪吃”应用概述11.1.1 “去哪吃”应用的定义11.1.2 “去哪吃”在中国的发展11.2 “去哪吃”的新趋势21.3 本文研究内容22 开发平台及相关技术简介32.1 IOS简介
6、32.2 开发语言Objective-C42.3开发环境42.3.1 Xcode 工具42.3.2 Simulator模拟器42.3.3 Interface Builder52.4应用程序框架52.4.1 模型52.4.2 视图52.4.3 控制器62.5 第三方类库72.5.1 网络工具72.5.2 SDWebImage72.5.3 efreshTableHeaderView82.6 本章小结83 系统详细设计93.1 需求分析93.2 详细设计93.2.1 首页103.2.2 动态页103.2.3美食分享页113.2.4 豆窝页113.3 登录的流程设计123.4 设计约束123.4.1
7、需求约束123.5 设计模式133.5.1 单例设计模式133.5.2 通知设计模式153.5.3 键值观察设计模式163.6 本章小结164 功能模块的具体实现174.1 数据请求174.2 数据的解析184.3 上拉加载更多/下拉刷新194.3 数据的存储204.4 算法描述与实现204.5 选择的控件214.6 本章小结215 系统功能验证225.1 附近的美食225.2 地图定位235.3 美食专辑详情页235.4 个人中心页255.5 登录测试255.6 本章总结266 总结和展望276.1 总结276.2 展望27参考文献28致 谢29 1 绪论 现今,人类社会己进入了后互联网时代
8、,科技进步给人类生活带来了巨大的改变,各种方便人们实际应用的产品应运而生,科技产品的不断丰富极大地提高和改善了人们的生活品质,“去哪吃”就是此环境背景下的产物。本文设计了一个精简版的美食查找应用,可以让人们随时随地了解到身边的美食,同大家一起分享自己因为美食而带来的快乐,更为热爱旅游与美食的人们带去了帮助,让旅途更加欢乐。1.1 “去哪吃”应用概述1.1.1 “去哪吃”应用的定义 “去哪吃”是完全基于用户和好友关系,通过本地活跃的美食用户发布特色美食与攻略,定位自动搜索周边商家信息,给力的美食试吃,时时掌握身边的美食动态,同时间一起享受生活,为大众解决去哪吃,最好吃等个性、精准所需的美食分享平
9、台。 1.1.2 “去哪吃”在中国的发展 好豆网自2009年创办以来,受到了全国百余家媒体广泛的关注与报道,被媒体和业内专家一致公认为中国生活互联网领域的新锐代表,是全球最受欢迎、最为活跃、成长性最好的中文美食社区服务平台。2012 年12月13日,由IT时代周刊、IT商业新闻网联合主办的IT时代周刊第八届CEO年会在北京凯宾斯基饭店隆重开幕,一场北京地区规模最大、规格最高的IT行业领袖们思想交流与碰撞的盛会由此展开。围绕“握在掌中的明天”的会议主题,大会还特别评出了各种奖项,其中好豆网凭借其手机应用“去哪吃”的强大竞争力荣获了2012中国最佳移动应用奖。2013年年初,好豆网荣获艾瑞“金瑞奖
10、”,在全球移动互联网大会荣获“重新定义移动互联网最佳案例奖”,并受邀参与CCTV2对话栏目,共谋移动互联网的发展1。2013年4月,好豆网成为微软全球首选合作伙伴,中国区九大合作伙伴之一。2013年5月,好豆网获得了全球移动互联网大会“最佳应用案例奖”以及中国互联网年度创新大典“中国饮食服务网站最佳创新力奖”两项殊荣。同年9月,“去哪吃”受邀加入Appstore全球推广计划,与苹果官方展开更深层次的合作;2013年12月,好豆网荣获“2013年度上升最快热门网站”殊荣。1.2 “去哪吃”的新趋势 相对于传统的美食网站和应用,“去哪吃” 是完全基于用户和好友关系,通过本地活跃的美食用户发布特色美
11、食与攻略,为大众解决去哪吃,最好吃等个性、精准所需的美食分享平台(和手机应用)”2。在“去哪吃”平台上,每个人都是美食内容的建设者,也都是受益者。而且,作为“去哪吃”的分享用户,还可以享受各种有价值的奖励,尤其是一旦成为认证的核心用户美食地主,还可以享受美食大礼包、生日红包、免单霸王餐等各种丰厚的荣誉和物质奖励,从某种意义上讲“吃货甚至可以成为一种时尚职业”。1.3 本文研究内容 本文深入分析了课题的背景及意义、iPhone应用的现状和发展趋势。在此研究基础上对影视手机客户端进行了设计和重构。本应用主要是借助iphone手机载体向专业的美食交流发布平台,找美食,发美食,寻找附近的商业菜系,时时
12、更新的美食资讯,GPS定位自动搜索周边商家信息的功能。 本文共分6章,主要内容如下:第1章绪论部分,主要概述去哪吃的定义、发展和未来趋势。第2章是开发工具介绍。第3章是功能模块的设计。第四章详细说明了功能模块的具体实现。第5章是简述测试过程。第6章是本文的总结和展望。2 开发平台及相关技术简介2.1 IOS简介 iOS 是由苹果公司开发的手持设备操作系统,苹果公司于2007年1月9日的Macworld大会上公布了这个系统,并命名为iPhone OS,但由于iphone OS与苹果的Mac OS X操作系统一样,并且此系统后来在iPod touch、iPad以及Apple TV等苹果产品上也广泛
13、应用,所以苹果公司于2010年6月7日WWDC大会上将其改名为IOS,并获得了思科iOS的名称授权3。2010年冬季,苹果公司的iOS操作系统已经占据了全球智能手机操作系统26%的市场份额。2011年10月4日,苹果公司宣布iOS平台的应用程序已经突破50万个。随着Andriod开源操作系统的异军突起以及Windows Phone的发力,iOS市场份额正被一点点的蚕食,但IOS设备的利润率高的惊人,以智能手机为例,iphone的利润额占到整个智能手机利润额的80%,受益于此,苹果的市值也达到了5000亿美元。 iOS并不依赖于传统的鼠标和键盘事件,而是引入了触摸事件,包括滑动、轻触屏幕和图标及
14、按键。一个触摸事件可以随时发生,也可以和一个或几个附加的触摸事件组合发生。触摸可以用于检测跟内容的简单交互,拖放对象等,也可以用于检测复杂的手势或交互行为,例如手指合拢和手指分开的手势(例如在照片程序中,用于放大缩小照片)。此外,iOS移动设备中还内置了加速器,使得旋转iOS设备时,界面也可以得到旋转,这也使得iPhone等便携设备更便于使用。自3GS开始,iphone装备有陀螺仪,这使得iphone有了重力感应,游戏效果更加的突出。 Iphone手机屏幕的下方是home键,单按回到主界面。连续按两次回到控制页面,控制页面是一些之前打开过的应用程序,它们处于后台状态,单击可以重新打开,向上轻扫
15、可以关闭该应用程序。手机顶端有一个Power键,用于唤醒和锁定屏幕,而home键和Power键同事按下是截屏操作。底部是dock,用户可以放置四个平时最经常使用的应用程序图标。屏幕最上方是状态栏,也成为电池条,显示一些有关资讯:如时间、电池电量、讯号强度、网络状态等。其余的屏幕用于显示当前的应用程序。启动程序,只需点按该程序的图标,点按屏幕下方的home键即退出应用程序。Iphone还有推送功能,当第三方软件收到了新的讯息时,苹果公司的服务器将把这些通知推送至iPhone或iPod Touch上(不管它是否正在运行中),用户可以根据自身的需求选择推送消息的显示样式,在设置中也设有开关供用户选择
16、哪些应用程序不需要推送通知,哪些应用程序需要推送通知,极其人性化。2.2 开发语言Objective-CObjective-C, OC语言是C语言的一个超集,只是在C语言的基础上添加了面向对象的思想,Objective-C最开始并不支持垃圾回收,因为垃圾回收有漫长的“死亡时间”, 会导致整个系统失去性能。但自Xcode4.0开始,OC引入了ARC (Automatic Reference Counting)自动引用计数机制来管理内存,不需要用户手动管理内存,编译器会在编译期间在合适的位置自动给对象插入retain、release或者autorelease。2.3开发环境2.3.1 Xcode
17、工具 Xcode是苹果公司提供给开发者用于开发应用程序的一个不开源的集成开发环境,在苹果公司的Mac操作系统下运行。Xcode支持C、OC、C+等多种语言的混编,支持项目管理、编辑代码、构建可执行程序、代码级调试、代码的版本管理、性能调优等等2。 Xcode4支持开发者开发基于iOS的iPad、iPhone、iPod Touch 设备的应用程序,这个功能给开发者提供诸多方便,开发者只需编写一套代码就可以移植到苹果的多种设备上,只是需要简单的适配一下屏幕尺寸而已。Xcode提供友好的页面开发环境,开发者可以通过项目窗口快速访问应用程序的所有元素,组和文件列表管理项目文件,包括了源代码文件和编译后
18、的目标文件。报错日志可以帮助开发者方便快速的查看报错信息进而快速定位错误信息位置加以解决。 Xcode有一个高级的代码编辑器,它提供代码补全、语法高亮、代码隐藏(临时隐藏代码块),还有错误、警告和说明的内置注释,这给英语基础不是很好的开发者提供了便捷,不用去刻意的记单词,只要打出首字母,Xcode会给你自动补全后面的内容,如果语法错误它还会自动警告并提供警告原因。Xcode环境中提供了一些默认的设置和用户环境设置。Xcode搜索助手提供了上下文文档,同时开发者可以在帮助文档窗口中浏览和搜索相关信息。2.3.2 Simulator模拟器 iPhone Simulator是集成在iPhone SD
19、K中提供给开发者测试应用程序的一个工具,应用程序在模拟器上运行的效果和在Iphone真机上的运行效果基本相同,只是模拟器没有打电话、发短信、真实定位的一些功能,这样,开发者在开发初期无需使用实际的iPhone/iPod Touch就可以测试应用程序。iPhone Simulator不需要开发者手动去启动,应用程序在Xcode上运行的时候模拟器会自动开启。Xcode会自动将应用程序安装到iPhone Simulator上3。 开发者在Xcode上创建的应用程序,在运行时需要选择iPhone模拟器还有设备。iPhone Simulator提供给开发者一个本地的应用测试环境。应用程序在iPhone模
20、拟器通过测试后,可以用Xcode编译并运行到与计算机相连接的iPhone上(先要下载证书授权真机)。应用程序的运行效果最后都以真机为主,Xcode可以在设备测试时用内置的调试器跟踪代码。2.3.3 Interface Builder Interface Builder是Mac操作系统下一个不开源的用于设计用户界面的应用程序,在iPhone SDK中提供的。使用Interface Builder创建应用程序图形用户界面,可以节约大量短时间,不需要手工编写代码创建、设置和定位界面对象,它是一个可视编辑器,程序员可以在运行程序前直观的看到程序在运行时的界面效果。2.4应用程序框架 MVC(模型视图控
21、制器)是Xerox PARC在八十年代为编程语言Smalltalk80发明的一种软件设计模式,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,MVC设计模式至今已被广泛使用4。近年来被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的IOS 和 PHP 的开发者的欢迎。2.4.1 模型 模型是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。2.4.2 视图 视图是应用程序中处理数据显示的部分,是用户能够看到并与之交互的界面,通常视图是依据模型数据创建的。2.4.3 控制器 控制器对象是应用程序的视图对象和模型对象之间的协调
22、者。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。图2-1 MVC模式设计 MVC的核心是多个视图能共享一个模型,从而减少代码的重复性。模型层与视图层和控制器层是相互分离的,改变三个部分中的任意一个,都不会影响到另外两个,也就是说如果一个应用程序有多个业务需求,开发者不需要去重新创建模型和控制器的代码,只需要新建视图即可,模型层可以包含某个视图没有用到的元素,但是必须包含多个视图合起来用到的所有元素,也就是说模型层的元素在视图层可以根据业务需求不展示出来,但是视图层展示出来的元素一定要在模型层中有相应的数据元素与之对应。MVC设计模式与数据结构无关,数据可能用不同的方式来表示,
23、如HTML,WAP等,开发者不需要去修改模型层和控制器的代码,只需要改变视图层的实现方式,就能展示给用户不同的界面5。 这样极大的提高了代码的重用性,大大的降低了代码的耦合性,部署特别快,可维护性特别高,有利于软件工程化管理。本设计也大量用到了MVC设计模式,如电影页面、Top250页面以及影院页面。这样一来,我就可以根据不同的用户需求而共用某个模型创建不同的视图去展示,减少了很多繁琐的操作,提高了我的编码效率。 2.5 第三方类库2.5.1 网络工具 ASIHTTPReques该工具由三方提供,在网络方面有这很强大的功能,将复杂的网络请求集成成简单的接口,可以用于同步、异步网络请求、下载、上
24、传二进制文件等;具体作用6:(1) 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作;(2)下载的数据,可存储到内存中或直接存储到磁盘中;(3)能上传本地文件到服务端;(4)可以请求并返回HTTP头信息的访问和操作方便;(5)能够获得到上传或下载的进度消息,为应用程序提供更好的体验;(6)支持上传或下载队列,并且可获取队列的进度信息;(7)支持Cookie;(8)当应用(iOS 4+)在后台运行时,请求可以继续运行;(9)支持GZIP压缩数据;(10)内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有 网络也可以返回已经缓存的数据结果7;(11)AS
25、IWebPageRequest 可以下载完整的网页,包括包含的网页、样式表、 脚本等资源文件,并显示在UIWebView /WebView中。(12)支持客户端证书;(13)支持通过代理发起Http请求;(14)支持带宽限制。在iOS平台,能够按照目前网络情况来自动决定是否限制 带宽,比方当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时 不做任何限制;(15)支持断点续传;(16)支持同步和异步请求; JSONKit:该第三发框架,用户数据解析,可以将网络获取的数据解析出来,还原成原来服务器提供的格式,当然,这样的工具还有SBJson等一些工具,但是根据自己的熟练程度,
26、最终我还是选择了JSONKit这个解析工具;2.5.2 SDWebImage 这个框架属于开发必备的框架,一个性能很好、接口很好用的图片缓存工具,在SDWebImage工具中,它会优先调用本地的图片,查看本地是否有缓存,这样就很有效的避免了重复请求、下载图片,可以节省用户的流量,和增加用户的体验效果;2.5.3 efreshTableHeaderView 该框架用户下拉刷新,比如一个页面以表格视图展示数据的时候,用户从网络端更新视图上展示的数据时,可以再顶部添加一个刷新按钮,但是正如大家所知,手机屏幕尺寸有限,在上面添加一个这样的按钮,会减少数据的展示量,使用RefreshTableHeade
27、rView框架,就很好的解决了这个功能。2.6 本章小结 本章主要介绍本设计所用到的开发工具Xcode,介绍了Ios开发常用的几种设计模式,并对MVC设计模式进行了深入的剖析,最后简单介绍了一下本设计用到的一部分开源框架。3 系统详细设计3.1 需求分析 “去哪吃”美食系统需要在进入系统的时候开启地图定位,获取到当前用户位置 。首页有四个小模块,分别是广告位、商业菜系、美食专辑和附近美食,每一个小模块都是根据当前位置来展示信息,同时可以通过城市选择按钮选择你想要了解的城市的美食信息。当想要进入动态页的时候,首先需要判断是否登录,登录成功后跳转到动态页,否则重新登录。美食分享页,添加美食图片,评
28、论的等级以及你的评价,当点击上传时候发表评论。个人中心页,需要先进行登录判断,如果在其它页面已经登录成功过,则直接进入个人中心页面,否则重新登录。更多页面,是对应用的设置页面。3.2 详细设计 根据需求分析与调查结果设计,将“去哪吃”分为首页、动态页、个人中心、美食分享与更多五个模块,其中各个模块及其包括的具体功能子模块如图3-1所示。 图3-1 系统结构3.2.1 首页 (1)首页功能描述 首页内容的组成:城市选择按钮、轮播图、三个按钮。城市选择按钮是有定位当前城市获取城市名称进行展示,也可以点击页面进入城市选择页选择想要的城市,通过城市选择刷新首页内容。轮播图是由一个图像视图、一个提示视图
29、和名称标签。图像视图展示当前比较好美食图片,提示视图是通过自定义封装的,可以对背景颜色以及对提示点进行改变,提示你当前所在页面,名称标签是当前美食的名称,点击图像视图可以通过加载一个webview显示选中的图像视图的具体内容。三个按钮分别是附近美食按钮、商业菜系按钮、美食专辑按钮,点击附近美食按钮进入附近美食页面,附近美食页由一个列表视图实现,每个自定义的cell含店铺的名称、位置、消费额度以及店内美食图片,点击每一个cell进入对应店铺页内含地图展示以及电话联系。商业菜系页分热门菜系与分类两个部分展示各类不同口味的美食。美食专辑页则是对对应城市的特别美食的介绍,是由美食图片、名称以及简介组成
30、。 (2)首页的设计思路 界面的布局:在XIB上面添加一个320 * 300的UIView视图作为轮播视图的背景视图,在View上面添加上添加一个UIScrollView视图作为轮播视图,一个UIlabel作为名称视图。 业务逻辑:项目启动的时候首先会通过地图定位获取到当前的坐标经纬度,对坐标进行反编码得到当前所在城市的名字,将城市名字通过block语法传到首页,以城市的名字作为字典的key获取字典的value值也就是城市的id,将id传入接口获得首页所需要的数据,将数据解析添加到视图上3.2.2 动态页 (1)功能描述 动态页的组成:刷新按钮、好友动态列表。刷新按钮可以更新好友动态列表,展示
31、当前最新的好友动态。好友列表是你所关注的所有好友的集合,每一个列都是由头像、用户名、美食图片、美食介绍、发表的时间组成,对应的用户列表可以让你欣赏到好友所发表美食的大图,而且还有这道美食所在的餐馆的具体位置以及联系方式,同样你可以通过查看具体位置而在地图上显示你的当前位置与美食餐馆的位置。好友头像可以让你进入好友的空间页面。 (2)设计思路 界面布局:在控制器的视图上面添加一个UITableView列表视图,自定义封装列表视图里面的内容,先添加一个UIview作为背景视图,在view添加一个30 * 30的UIImageView作为头像视图,添加五个label按要求布好句作为内容和标签的显示视
32、图,通过- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier加载到UITableView上 业务逻辑:要进入动态页需要先登录,登录成功后会获取一个用户的私人id通过id请求网络获取到数据进行展示。当进入动态详情页会将一级页面的数据进行筛选处理然后通过点语法保存传到二级页面,在二级页面进行展示,通过获取到的经纬度,调用MapView来做地图定位。3.2.3美食分享页 (1)功能描述 美食分享页的组成:图片选择、口味评价、餐馆名称、美食名称、评论。图片选择有两种途径,一
33、是通过直接进入手机相册库来选着你想要的发表的美食。二是通过拍照,拍照可以让你实时实地的上传你所喜欢的美食。口味评价是你对当前美食的评分,分五个级别,你可以对你喜欢的美食进行评分。评论是你自己所发表一些美食的的感悟,分享你的心情。 (2)设计思路 通过调用系统的方法可以打开系统相册或相机(需要真机),选择相片通过代理方法将选中的相片显示在事先定义好的UIImageView上面。口味评价通过for语句循环遍历五个button当点击button的时候为button添加一个图片,通过取反的思想当再次点击的时候就隐藏图片。评论是一个UITextField控件,点击时候会通过代理方法调用出来键盘,同时底部
34、视图会上移一定距离,上移的过程中对其添加了动画,再次点击的时候让键盘对象失去第一响应者隐藏键盘,将你输入内容作为参数通过接口上传到服务器。3.2.4 豆窝页 (1)功能描述 豆窝页的组成:用户头像、所在地、豆币、分享的美食。豆窝页是个人的动态页,里面包含了个人的所有信息,在这里面你可以查看以前所发表过的美食来细细回味曾经的那种感觉,也可以查看你的粉丝数以及你所收藏的美食,还有你曾经编辑未完成的发表信息,总之豆窝就是你的个人的美食之家,这里面有你的所有动态,同时,你也可以同样查看到你所关注的好友的一些动态。(2)设计思路 在控制器的视图上面添加一个UITableView列表视图,自定义封装一个视
35、图,在自定的视图上添加ImagView、Label、Button按照要求进行布局,将自定义封装的视图做一个UitableView的头部视图添加到tableview上,可以实现滑动的效果,视图布局完成后通过用户的id请求网路获取json数据,解析数据对数据内的一维数组进行二维数组的转换,获取的粉丝数据是一个很大的数通过类型转换处理后保存数据然后进行加载展示。3.3 登录的流程设计 自定义的登陆与注册页面,在注册页面你需要输入的你的邮箱或者是电话的名称进行验证,定义自己的昵称设置自己的秘密,密码需要设置两次,只有两次的秘密相同了才能通过注册,注册成功以后,你就可以到登陆页面进行登陆。登陆页面有输入
36、你注册所用的用户邮箱(电话号码),然后是你的设置的密码,当你的用户邮箱(电话号码)和密码都匹配的时候你才可以登陆成功,成功后会获取到你当前用户的所有信息,以及做一些更深入的操作。判断流程如图3-2用户登录服务器端是否匹配登录成功返回用户idNY 图3-2 登录判断流程图3.4 设计约束3.4.1 需求约束 (1)软件运行环境约束:能保证兼容从iOS4.3一直到iOS6.1.2完美运行10; (2)硬件运行环境环境(包括运行环境和开发环境)的约束:本系统必须保证 能完美运行在iphone3gs、iphone4、iphone4s、iphone5上面;必须对iphone5 进行完美适配10。 (3)
37、接口/协议的约束:保证接口的安全性,必须对接口进行加密,加密规则 禁止外泄,统一采用json接口格式约束; (4)用户界面的约束:用户界面UI必须和需求保持一致,严谨出现拉伸,挤 压的界面;3.4.2 隐含约束 有许多方面,产品人员并不一定能全部考虑到,设计人员应该根据自己的设计经验,在发现产品原型有不完善的时候,将能对本系统产生良好影响的建议像产品人员提出,产品人员经商量后确定是否对需求做修改; 3.5 设计模式3.5.1 单例设计模式 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方
38、便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。以下程序是单例设计模式.m文件实现方法3。#import UserContext.himplementation UserContextstatic UserContext *singletonInstance;+ (UserContext *)shareInstance if (singletonInstance = nil) synchronized(self) singletonInstance = self alloc init; return singletonInstance;#p
39、ragma mark - sengleton setting+ (id)allocWithZone:(NSZone *)zone synchronized(self) if (singletonInstance = nil) singletonInstance = super allocWithZone:zone; return singletonInstance;+ (id)copyWithZone:(NSZone *)zone return self;- (id)retain return self;- (unsigned)retainCount return UINT_MAX;- (on
40、eway void)release - (id)autorelease return self;end (1)工厂方法设计模式 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去
41、完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品4。 工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)应用。 (2)工厂方法实例+ (UIButton *)createRectButton:(CGPoint)point title:(NSString *)title action:(SEL)action taget:(id)taget UIButton *rectButton = UIButton buttonW
42、ithType:UIButtonTypeCustom; rectButton setBackgroundImage:UIImage imageNamed:btnbg_blue.png forState:UIControlStateNormal; rectButton setBackgroundImage:UIImage imageNamed:btnbg_yellow.png forState:UIControlStateHighlighted; rectButton setTitleColor:UIColor whiteColor forState:UIControlStateNormal;
43、rectButton_setTitleColor:UIColor_blackColor forState:UIControlStateHighlighted; rectButton setTitle:title forState:UIControlStateNormal; rectButton_addTarget:taget_action:action forControlEvents:UIControlEventTouchUpInside; rectButton.frame = CGRectMake(point.x, point.y, 59, 32); rectButton.titleLab
44、el.font = UIFont boldSystemFontOfSize:14; return rectButton;3.5.2 通知设计模式 Cocoa 的NSNotification类的实例封装了要广播的消息,有兴趣接收信息的对象将利用Cocoa 的NSNotificationCenter类的实例注册它们自己。注册的对象称为观察者。 当将一条通知发送到通知中心时,通知中心会把该通知分发给合适的观察者。单个通知可能被广播给任意数量的观察者,把消息发送到通知中心的对象不需要知道有哪些观察者存在,或者有多少个观者者最终会接收到通知。类似的,观察者不一定需要知道通知来源于何处。 当匿名对象需要被
45、动地观察和反应重要事件时,可以使用通知模式。通知设计模式设计事例:- (void)zhengObserver(id)observersa selector:(SEL)aSelectora name:(Nsstring *)aName object:(id)aObject;3.5.3 键值观察设计模式 一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的。观察者模式较完美地将目标对象与观察者对象解耦。3.6 本章小结 本章主要是对各功能模块的需求和布局做了仔细的分析。描述了登录与注册的实现原理,阐述了开
46、发过程中所需要的一些约束,对项目中使用的一些设计模式做了表述。4 功能模块的具体实现4.1 数据请求 本设计使用的网络请求框架是第三方类库ASIHTTPRequest,Ios的SDK中本来有网络请求的API,为什么我要使用第三方的网络框架呢,是因为本人自身觉得系统的API比较复杂,调用起来比较繁琐,而ASIHTTPRequest是一个印度大咖根据CFNetwork API进行的一个网络框架的封装,实现了网络请求的诸多功能,并且也特别易用。只是很遗憾的是现在这个神奇的网络框架已经停止更新了,不过暂时还是能解决大部分的网络请求功能。部分代码如下:+(ASIHTTPRequest *)requestUrl:(NSString *)url