学习经验尚浅,以前iOS开发一直停留在单机版的开发,但是现在如果一个移动端开发完全抛弃网络功能,它也不会存在很久。网上讲的关于iOS的网络部分都比较专一,这两天经过融合和总结,大致摸索出了一套整体流程,在此和对网络连接不甚明了的同学分享,本文不涉及技术层面,只是概念的串通。
前提注:如果你真的只是开发一个单机版app也或者公司已经将网络数据封装好给你个接口or XML格式等文件用而且也不想知道的话就请华丽丽地忽视我吧。
一、前提概览
首先,要考虑app所在的大环境是个什么级别的环境,我大致将环境分为以下几种
1. 个人开发,单机版app
此时如果没有数据交换存储的话,忽略这篇文章
如果有数据存储和操作的话,用coreData/NSArray(NSDictionay),这种情况下几乎是不需要直接操作SQLite的(优点之后说)
2. 个人开发,网络版app
此时如果没有网络数据存储,比如只是将某个板块做成了地图而且只是展示地图数据,只需要用好MapKit or Google API即可
如果只是简单获取一些商家封装好的网络数据。比如获取iTunes的订阅等,需要的是用好XML解析功能(NSXMLParser,第三方框架)or JSON解析功能(同理)
如果在以上两条情况下需要对数据进行增删改查,需要用到服务器交互或者本地coreData(不建议直接操作数据库)
3. 团队开发,单机版app(真的是纯单机版)
我认为这种情况不太可能
4. 团队开发,网络版app
这种情况也适用于个人想开发配套web应用的情况
此时如果web方面以及服务器交互方面由团队其他人在做,做好自己的事情即可
如果是个人想做全栈的活,还需要至少了解网络协议以及熟练使用至少一门服务器脚本(比如PHP, Node.js等),SQL,其次可以考虑web前端做web版配套应用。再用java等编程语言做业务逻辑对于一个个人开发者来说工作量太大了,如果一定要这么做,你真的需要考虑组建一个团队···
对于以上情况,我下边总结的都是关于个人开发者的一点经验,一个专业团队中,专才更重要,而不是全栈工程师
二、网络数据操作
这个部分只是关于网络数据方面,与服务器和数据库无关。
一种是现成的封装好的网络数据,比如MapKit和Google Map,这样熟练运用其框架就可实现大部分功能。
一种是商家提供的数据交换格式XML, JSON, RSS等,此时做的是学好XML解析(自带NSXMLParser,或者GDataXML等第三方库,网上建议使用第三方库,自带的解析有些繁琐,我不否认第三方库更简单明了,但是NSXMLParser更能体现SAX解析方式的思维套路),JSON解析。现在主要就是XML, JSON这两种格式,大公司都有JSON格式给你,但是也不能避免一些你确实想用的数据公司只提供了XML。
此处因为我觉得团队不够级别时,第三方公司不会给你自主交互服务器的机会,但是会给你API操作。更何况是个人开发,主要还是以操作数据交换文件为主。
三、网络操作带有服务器和数据库
阐述一些基础概念,因为iOS开发严格意义上来说只是客户端的开发,服务器数据库部分只是锦上添花,所以有些像我一样的新手只做过web,iOS开发的童鞋,对于整体流程可能没有认识。尤其是移动端,一个公司不会用移动端开发操作后台的平台的吧。
最终获得网络数据库数据的途径有两种
1. 客户端 - 数据库 模式,这种方式一般情况是非常不推荐的,一是因为直接操作数据库代码繁琐,不宜更新维护,比如大量的连接关闭操作,sql操作,当表中属性信息改变时,改动工作量很大。二是这样一来数据库的借口信息将暴露在客户端中,不安全,数据库一定放在大后方。
2. 客户端 - 服务器 - 数据库 模式,这种模式才是正常的模式,服务器封装了对数据库的操作,只用对服务器发出请求再收到回应数据即可。此处发出请求的方式为GET/POST两种主要的方式,前者有字段长度限制,属于通过url操作获得数据,后者属于将request发送到服务器,服务器经过处理request给出一个response返回给客户端,这种方式比较常用,理论上不考虑服务器的运算能力,是没有容量限制的。GET只适用于获取少量数据,因为你不能把大量数据,比如视频,放在某个url指向的文件中供调用吧。POST即可经过服务器的封装运算,更有效地操作大量的数据,比如视频的上传下载等,具体请查阅相关文章。
其次我将数据分为以下几种情况
1. 数据只需要进行单机操作(少量)
一般数据存俩NSArray or NSDictionary得了
用户登录信息的Cache通过coreData存储在本地(第2点详述)
2. 数据库只需要进行单机操作(大量)
此时coreData是首选,说明一下coreData并不是数据库,是一种数据持久化技术,哈哈这种概念听多了和没听一样,通俗来讲,coreData是苹果对SQLite数据库的很好的封装,开发者通过coreData可以更有效的操作SQLite数据库,相当于程序和SQLite的中介。
所以此处也应该明白了一个有可能困扰新手的问题,coreData和SQLite有什么区别?
如果对于coreData和SQLite本身来讲,不是一种概念,因为最终操作的都是SQLite。非要说区别,指的是操作coreData和直接操作SQLite有什么区别。coreData是将SQLite进行对象化然后进行操作,如果对Oracle或者mySQL有经验的童鞋,不难理解数据库实例化的意义,毕竟现在什么都流行面向对象嘛!coreData的优点就在于仿佛是连接你的MVC程序和SQLite的服务器,对数据库进行封装操作,在SQLite表的属性有所改变or换了一个数据库实例什么的,能够进行方便的数据转移。直接操作SQLite一般情况下既繁琐又难以维护,但是如果你需要对数据库进行高级操作,coreData也许满足不了你,这时就需要撇开coreData直接操作SQLite。
CoreData还有一个最大的优点就是通过NSFetchedResultsController以及其delegate方法,可以实现当增删改查数据库时对页面显示数据的实时更新,好像AJAX哈哈
3. 数据需要在网络上进行数据交换(少量,公开)
这种情况下,我认为目前移动端并没有用来做服务器和数据库的后台开发,所以一般来讲除了用户信息和某些特定行业app(比如银行等),大部分数据都是公开的网络数据,用数据交换最靠谱,优点就是简单,速度快。增删改查JSON/XML的操作在iOS中可以实现。
这时首选是JSON,后起之秀,轻量级数据交换格式,简单易用,思路也清晰,在iOS开发中很是推荐
如果没有,选用XML的轻量级第三方框架比如TBXML,GDataXML等,第三方框架多用DOM方式解析,比原生态的快很多,但是只是在处理少量数据时,详情在这里
http://mobile.51cto.com/iphone-281283.htm
4. 数据需要在网络上进行数据交换(少量,安全传输)
这种情况最常见的莫过于用户登录验证了,此时需要与服务器进行交互,发送HTTP请求(POST,POST安全,因为需要经过服务器处理)
最老的NSURLConnection(已经deprecated,而且在主队列操作,太慢)
iOS7之后推荐的NSURLSession(可以异步处理,详情点击这里,我的另一篇文章)
第三方AFNetworking(与NSURLSession同理,我个人测试觉得是最快的)
ASIHttpRequest,当年很牛,但是很久没有更新,前两天用了一下,如果你的程序开启了ARC模式,已经不能用了,因为这个框架是在手动控制内存的时代写的
这时不要想如何与数据库直接连接操作,你这样等于把所有用户信息暴露在了任意一个移动端中
5. 数据需要在网络上进行数据交换(大量,公开)
Num 1. 你需要大量数据中的一部分。如果是数据交换的方式做,JSON和XML的DOM级别框架也许满足不了你了。这时候推荐水果自带XML解析NSXMLParser,libxml2,支持SAX解析,SAX和DOM的区别以及NSXMLParser的基础实现点击这里,我写过一篇。
Num 2. 你需要大量数据中的某一条。请向服务器发送请求(此时XML,JSON代码可能会比较冗长)。非要连数据库,就把数据库的接口信息当做服务器接口信息来做,然后进行相应的增删改查。
Num 3. 你需要大量数据的所有,也许XML DOM方式以及JSON会快一些,我没测试过大量数据。
6. 数据需要在网络上进行数据交换(大量,安全传输)
这在移动端应该是见不到的,那就是内部web项目的事情了。
本文旨在给iOS个人开发初学者做一个简单易懂的网络指南,如果有错误请不吝指正。
如果你对搭建网络服务器和数据库有一点兴趣,在评论中告诉我,我之前搭建了一个AWS EC2 配 AWS RDS的小系统,之后会写点这方面的心得。
欢迎光临我的主页http://www.jiachengzhi.com/