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

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

学习经验尚浅,以前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的小系统,之后会写点这方面的心得。

 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值