iOS开发 - 网络&数据库功能综述

学习经验尚浅,以前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/

时间: 2024-10-12 09:59:51

iOS开发 - 网络&数据库功能综述的相关文章

iOS开发网络篇—文件下载(五·下载功能的封装)

iOS开发网络篇—文件下载(五·下载功能的封装) 一.简单说明 在前面几篇文章介绍下载代码的基础上,此文分析对下载功能进行封装. 通过之前的代码,我们发现仅仅是下载一个文件就需要写很长的代码,那么如果要下载多个文件,就需要写多份代码.在这里,我们把下载一个文件的代码进行封装.控制器只需要知道,下载哪个文件,下载到哪个路径就可以了. 在对下载的功能进行封装后,添加一个文件下载器,一个文件下载器只下载一个文件,封装后如果要下载多个文件的话,那么只需要创建多个文件下载器对象就可以进行控制和下载了. 二

IOS开发之数据库FMDB

IOS开发之数据库FMDB 1.简介 需求作用:如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000/2008:中小企业使用较多 (2)Oracle:比较复杂, 大企业使用较多 (3)Mysql数据库:网站使用较多 (4)sqlite:本地数据库, 访问数据足够快, 直接访问文件  足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了  足够小, 系统不超过1M, 适合在移动端上使用 2. Me

iOS开发网络篇—数据缓存

iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器

iOS开发网络篇—简单介绍ASI框架的使用

iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高.可惜作者早已停止更新,有一些潜在的BUG无人去解决 ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考 http://www.cnblogs.com/dot

ios开发 网络编程浅析(一)

iphone包含了很多框架和库,从底层的套接字到不同层次的封装,可以方便地给程序添加网络功能. (1)BSD套接字.最底层的套接字,这是Unix网络开发常用的API.如果从其他系统移植程序,而程序用的是BSD套接字,那么网络部分可以继续使用这些API. (2)CFNetwork framework .CFNetwork 也是比较底层的, 是对BSD套接字的一个扩展 .它是一个C语言的库,它是基于BSD套接字,提供了对网络协议的抽象.这些抽象使得用户更容易地操作套接字.处理网络的各种连接..它集成

IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)

IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传) 网络ios文件管理器attributespathurl 在工程中,我们会常常遇到需要下载的程序,比如下载在线音乐.下载图片等等,今天我将介绍一下利用ASIHTTPRequest的下载示例,支持断点续传,利用ASIHTTPRequest下载以及断点续传的原理在我的博客:http://blog.csdn.net/pjk1129/article/details/6575588中有具体的介绍,今天重点介绍如何实现,废话少说,开始

iOS开发网络篇—文件下载(六·压缩和解压)

iOS开发网络篇—文件下载(六·压缩和解压) 一.完成文件下载 需求:完成文件下载 1.在本地服务器中,添加一个图片的压缩文件. 2.代码示例: 文件下载器代码: 头文件 1 // 2 // YYfileDownloader.h 3 // 01-文件的下载(不合理) 4 // 5 // Created by apple on 14-7-1. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import <Founda

iOS开发网络篇—XML数据的解析

iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document) XML举例 <videos> <video name="小黄人 第01部" length="30" /> <video name="小黄人 第02部&qu

IOS开发网络篇—XML介绍

iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document) XML举例 <videos> <video name="小黄人 第01部" length="30" /> <video name="小黄人 第02部" length="1