iOS网络操作

作者: 勇往直前888 | 来源:发表于2016-06-01 20:18 被阅读274次

    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 网络编程模式总结

    相关文章

      网友评论

        本文标题:iOS网络操作

        本文链接:https://www.haomeiwen.com/subject/omebrttx.html