iOS網(wǎng)絡(luò)操作

iOS提供的API

socket 方式

IOS 提供的socket 方式的網(wǎng)絡(luò)編程接口為CFSocket辞州。CFSocket是BSD sockets的抽象和封裝,CFSocket提供BSD sockets幾乎所有的功能谣辞,并與run loop集成,用來實(shí)現(xiàn)多線程網(wǎng)絡(luò)編程和網(wǎng)絡(luò)事件監(jiān)聽秋泳×氏校基于 CFSocket可以實(shí)現(xiàn)各種類型的 socket編程攒菠,包括stream-based 的sockets(如TCP)和packet-based 的sockets(如UDP)迫皱。
常用第三方庫:
robbiehanson/CocoaAsyncSocket
robbiehanson/XMPPFramework
一般要用到socket的地方就是需要長連接的地方,TCP居多辖众,做IM的時(shí)候需要用到卓起。其他情況,用到的情況不多凹炸。

stream方式

iOS 為stream編程模式提供的api編程接口包括兩大類戏阅,一類是Core Foundation框架層用C語言實(shí)現(xiàn)的CFStream API(包括CFStream、 CFReadStream 啤它、CFWriteStream等),一類是基于其上的在Foundation框架層用Objective-C語言實(shí)現(xiàn)的NSStream API(包括NSStream奕筐、NSInputStream NSOutputStream等)舱痘。
這些接口用的地方也不是很多。

URL 方式

url 編程模式通過URL 的方式來實(shí)現(xiàn)網(wǎng)絡(luò)編程离赫,任何要存取的網(wǎng)絡(luò)資源(包括局域網(wǎng)和廣域網(wǎng))都可以用一個(gè)URL來表示和存取芭逝,并支持設(shè)備間的資源共享。url 編程模式系統(tǒng)提供http, https, file, ftp, data等五種協(xié)議支持渊胸,并允許用戶自己開發(fā)和登記相關(guān)類來支持另外的應(yīng)用層網(wǎng)絡(luò)協(xié)議旬盯,進(jìn)行協(xié)議的擴(kuò)展。
url 編程模式在IOS系統(tǒng)可以使用兩種編程接口:NSURLSession 和NSURLConnection翎猛。
對于iOS 7 以后的最新系統(tǒng)推薦使用NSURLSession API胖翰,對于老版本由于不支持NSURLSession,因此必須使用NSURLConnection API切厘。
第三方庫:
AFNetworking/AFNetworking
yuantiku/YTKNetwork
在iOS開發(fā)中萨咳,這是用得最多的,需要重點(diǎn)掌握
AFNetworking3.0使用簡介

iOS網(wǎng)絡(luò)層次

AFNetworking

  • 直接用3.0版疫稿,基于NSURLSession某弦,比較好用
  • HTTP數(shù)據(jù)業(yè)務(wù)用AFHTTPSessionManager
  • 上傳和下載用AFURLSessionManager
  • 證書用AFSecurityPolicy
  • 判斷網(wǎng)絡(luò)狀況用AFNetworkReachabilityManager
  • request用AFJSONRequestSerializer,僅限于HTTP數(shù)據(jù)業(yè)務(wù)
  • response用AFJSONResponseSerializer而克,僅限于HTTP數(shù)據(jù)業(yè)務(wù)
  • AFMultipartFormData不推薦使用靶壮,image和業(yè)務(wù)數(shù)據(jù)混合的方式不好
  • 圖片可以考慮用上傳和下載業(yè)務(wù)AFURLSessionManager

AFNetworking/AFNetworking
AFNetworking文檔

YTKNetwork

  • 主要還是通過繼承基類的方式來使用
  • 使用了AFNetworking,是以源代碼的方式繼承员萍,沒有用Pods
  • 對外暴露url腾降,request等概念,不是非常好
  • 繼承方式改為協(xié)議方式碎绎,面向接口方式比較好
  • 還可以封裝得更徹底一點(diǎn)
  • YTKBatchRequest 類和YTKChainRequest 類作用不是很大
    yuantiku/YTKNetwork
    YTKNetwork基礎(chǔ)教程
    YTKNetwork 使用高級(jí)教程

自己的思考

  • 底層用AFNetworking螃壤,版本3.0,用源代碼整合的方式筋帖,對外輸出framework
  • 數(shù)據(jù)業(yè)務(wù)奸晴,上傳業(yè)務(wù),下載業(yè)務(wù)分開考慮
  • image上傳下載提供專門的接口日麸,方便使用
  • 使用者使用代理寄啼,簡化使用方式
  1. Block是趨勢,不過其主要作用是代碼聚合代箭,不利于模塊分割墩划;這里是要把具體業(yè)務(wù)和網(wǎng)絡(luò)模塊分割,讓不同的部門負(fù)責(zé)嗡综。所以乙帮,Block這種聚合的使用方式,在這里并不是最佳
  2. Notification是1對多的關(guān)系极景,在這里會(huì)帶來復(fù)雜性察净。并且全局的消息名字驾茴,并不能解耦
  3. 代理的1對1的溝通方式,比較合適
  4. protocol氢卡,使用者沟涨,實(shí)現(xiàn)者三者分離的模式,適合模塊劃分的隱含需求
  5. 可以做的像tableView那樣方便使用(協(xié)議和使用由底層模塊負(fù)責(zé)异吻,上層使用者比較方便)
  6. 容易和Android的思維方式達(dá)成統(tǒng)一
  7. Swift面向接口編程裹赴,也方便今后的進(jìn)化
  8. delegate的方式都可以改為Block,這個(gè)是一一對應(yīng)的诀浪,沒有問題棋返。這里選擇代理,只是更強(qiáng)調(diào)使用者和代理這種強(qiáng)烈的區(qū)分意味雷猪,讓使用者用起來更簡單睛竣。代碼是否在一個(gè)地方匯聚,不是這里的最重要需求求摇。這里更強(qiáng)調(diào)隔離射沟,讓業(yè)務(wù)使用者和框架實(shí)現(xiàn)者各司其職。這里的核心需求和Block的最重要特色是相反的与境。tableView從設(shè)計(jì)思路上是很值得參考的一個(gè)案例验夯。
ZANetwork.jpg

參考文檔

iOS 網(wǎng)絡(luò)編程模式總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摔刁,隨后出現(xiàn)的幾起案子挥转,更是在濱河造成了極大的恐慌,老刑警劉巖共屈,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绑谣,死亡現(xiàn)場離奇詭異,居然都是意外死亡拗引,警方通過查閱死者的電腦和手機(jī)借宵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矾削,“玉大人壤玫,你說我怎么就攤上這事≌恚” “怎么了垦细?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挡逼。 經(jīng)常有香客問我,道長腻豌,這世上最難降的妖魔是什么家坎? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任嘱能,我火速辦了婚禮,結(jié)果婚禮上虱疏,老公的妹妹穿的比我還像新娘惹骂。我一直安慰自己,他們只是感情好做瞪,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布对粪。 她就那樣靜靜地躺著,像睡著了一般装蓬。 火紅的嫁衣襯著肌膚如雪著拭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天牍帚,我揣著相機(jī)與錄音儡遮,去河邊找鬼。 笑死暗赶,一個(gè)胖子當(dāng)著我的面吹牛鄙币,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹂随,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼十嘿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岳锁?” 一聲冷哼從身側(cè)響起详幽,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浸锨,沒想到半個(gè)月后唇聘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柱搜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年迟郎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聪蘸。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宪肖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出健爬,到底是詐尸還是另有隱情控乾,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布娜遵,位于F島的核電站蜕衡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏设拟。R本人自食惡果不足惜慨仿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一久脯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镰吆,春花似錦帘撰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牢硅,卻和暖如春蹬耘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唤衫。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工婆赠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佳励。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓休里,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赃承。 傳聞我的和親對象是個(gè)殘疾皇子妙黍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容