国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS開發 - 網絡&數據庫功能綜述

2019-11-09 18:48:56
字體:
來源:轉載
供稿:網友

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的小系統,之后會寫點這方面的心得。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梁平县| 仁布县| 沾益县| 博罗县| 宁晋县| 土默特右旗| 长葛市| 梨树县| 桃源县| 青冈县| 宝应县| 年辖:市辖区| 郁南县| 中卫市| 泗洪县| 广昌县| 兴城市| 台中县| 彰化县| 海门市| 哈巴河县| 大理市| 呼图壁县| 扶绥县| 宽城| 邢台县| 昌平区| 淮滨县| 瑞安市| 南郑县| 治县。| 武乡县| 玉屏| 五河县| 文化| 河东区| 镇宁| 皋兰县| 三台县| 长葛市| 肇州县|