iOS网络操作

iOS提供的API

socket 方式

IOS 提供的socket 方式的网络编程接口为CFSocket。CFSocket是BSD sockets的抽象和封装,CFSocket提供BSD sockets几乎所有的功能,并与run loop集成,用来实现多线程网络编程和网络事件监听。基于 CFSocket可以实现各种类型的 socket编程,包括stream-based 的sockets(如TCP)和packet-based 的sockets(如UDP)。
常用第三方库:
robbiehanson/CocoaAsyncSocket
robbiehanson/XMPPFramework
一般要用到socket的地方就是需要长连接的地方,TCP居多,做IM的时候需要用到。其他情况,用到的情况不多。

stream方式

iOS 为stream编程模式提供的api编程接口包括两大类,一类是Core Foundation框架层用C语言实现的CFStream API(包括CFStream、 CFReadStream 、CFWriteStream等),一类是基于其上的在Foundation框架层用Objective-C语言实现的NSStream API(包括NSStream、NSInputStream NSOutputStream等)。
这些接口用的地方也不是很多。

URL 方式

url 编程模式通过URL 的方式来实现网络编程,任何要存取的网络资源(包括局域网和广域网)都可以用一个URL来表示和存取,并支持设备间的资源共享。url 编程模式系统提供http, https, file, ftp, data等五种协议支持,并允许用户自己开发和登记相关类来支持另外的应用层网络协议,进行协议的扩展。
url 编程模式在IOS系统可以使用两种编程接口:NSURLSession 和NSURLConnection。
对于iOS 7 以后的最新系统推荐使用NSURLSession API,对于老版本由于不支持NSURLSession,因此必须使用NSURLConnection API。
第三方库:
AFNetworking/AFNetworking
yuantiku/YTKNetwork
在iOS开发中,这是用得最多的,需要重点掌握
AFNetworking3.0使用简介

iOS网络层次

AFNetworking

  • 直接用3.0版,基于NSURLSession,比较好用
  • HTTP数据业务用AFHTTPSessionManager
  • 上传和下载用AFURLSessionManager
  • 证书用AFSecurityPolicy
  • 判断网络状况用AFNetworkReachabilityManager
  • request用AFJSONRequestSerializer,仅限于HTTP数据业务
  • response用AFJSONResponseSerializer,仅限于HTTP数据业务
  • AFMultipartFormData不推荐使用,image和业务数据混合的方式不好
  • 图片可以考虑用上传和下载业务AFURLSessionManager

AFNetworking/AFNetworking
AFNetworking文档

YTKNetwork

  • 主要还是通过继承基类的方式来使用
  • 使用了AFNetworking,是以源代码的方式继承,没有用Pods
  • 对外暴露url,request等概念,不是非常好
  • 继承方式改为协议方式,面向接口方式比较好
  • 还可以封装得更彻底一点
  • YTKBatchRequest 类和YTKChainRequest 类作用不是很大
    yuantiku/YTKNetwork
    YTKNetwork基础教程
    YTKNetwork 使用高级教程

自己的思考

  • 底层用AFNetworking,版本3.0,用源代码整合的方式,对外输出framework
  • 数据业务,上传业务,下载业务分开考虑
  • image上传下载提供专门的接口,方便使用
  • 使用者使用代理,简化使用方式
  1. Block是趋势,不过其主要作用是代码聚合,不利于模块分割;这里是要把具体业务和网络模块分割,让不同的部门负责。所以,Block这种聚合的使用方式,在这里并不是最佳
  2. Notification是1对多的关系,在这里会带来复杂性。并且全局的消息名字,并不能解耦
  3. 代理的1对1的沟通方式,比较合适
  4. protocol,使用者,实现者三者分离的模式,适合模块划分的隐含需求
  5. 可以做的像tableView那样方便使用(协议和使用由底层模块负责,上层使用者比较方便)
  6. 容易和Android的思维方式达成统一
  7. Swift面向接口编程,也方便今后的进化
  8. delegate的方式都可以改为Block,这个是一一对应的,没有问题。这里选择代理,只是更强调使用者和代理这种强烈的区分意味,让使用者用起来更简单。代码是否在一个地方汇聚,不是这里的最重要需求。这里更强调隔离,让业务使用者和框架实现者各司其职。这里的核心需求和Block的最重要特色是相反的。tableView从设计思路上是很值得参考的一个案例。
ZANetwork.jpg

参考文档

iOS 网络编程模式总结

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容