美文网首页
IOS网络开发NSURLSession详解(一)概述

IOS网络开发NSURLSession详解(一)概述

作者: 小羊孩子 | 来源:发表于2019-06-27 22:45 被阅读0次

    IOS网络开发NSURLSession详解(一)概述

    一. 概述

    NSURLSession是iOS SDK提供的一组相对容易使用的网络API。它包括几个部分NSURLRequest,NSURLCache、NSURLSession、NSURLSessionConfiguration,NSURLSessionTask。iOS的网络编程除了NSURLSession,也可以使用NSURLConnection,后者易用性教差。网络开发整体包括五个部分

    支持的协议(例如http)
    授权和证书(例如服务器要求提供用户名密码)
    cookie存储(例如不存储cookie)
    cache管理(例如只在内存cache,不cache到硬盘)
    配置管理(例如http headers等配置信息)
    

    二 简单介绍下NSURLSession的几个核心类

    1.1 NSURLSessionConfiguration

    指定NSURLSession的配置信息。这些配置信息决定了NSURLSession的种类,HTTP的额外headers,请求的timeout时间,Cookie的接受策略等配置信息。

    这里详情讲解下三种NSURLSessionConfiguration,这决定了NSURLSession种类

      • (NSURLSessionConfiguration *)defaultSessionConfiguration,使用基于硬盘的持久化Cache,保存用户的证书到钥匙串,使用共享cookie存储
      • (NSURLSessionConfiguration *)emhemeralSessionConfiguration配置信息和default大致相同。除了不会把cache、证书或者任何和Session相关的数据存储到硬盘,而是存储在内存中,生命周期和Session一致。比如浏览器无痕浏览等功能就可以基于这个来做。
      • (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString )identifier创建一个可以在后台甚至APP已经关闭的时候仍然传输数据的会话。注意,后台Session一定要在创建的时候赋予一个唯一的identifier,这样在APP下次运行的时候,能够根据identifier来进行相关的区分。如果用户关闭了APP,iOS系统会关闭所有的background Session。而且被用户强制关闭了以后,iOS系统不会主动唤醒APP,只有用户下次启动了APP,数据传输才会传输。

    1.2 NSURLSessionTask

    DataTask - 用来请求资源,然后服务器返回数据,再内存中存储为NSData格式。default,ephemeral,shared Session支持data task. background session不支持。

    Upload Task - 和Data Task类似,只不过在请求的时候提供了request body。并且background Session 支持upload task

    Download Task - 下载内容到硬盘上,所有类型的Session都支持。

    注意: 创建的task都是挂起状态,需要resume才能执行。

    1.3 NSURLSession

    会话是基于NSURLSession网络开发的核心组件。由上文的Configuration来配置,然后作为工厂,创建NSURLSessionTask来进行实际的数据传输任务

    self.session = [NSURLSession sesstionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    

    创建一个task

    NSURLSessionDataTask *dataTask = [self.session dataTaskWithURL:[NSURL URLWithString:imageURL] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){}]
    

    1.4 NSURLRequest

    指定请求的URL和cache策略
    例如,如下这个初始化函数

    (instancetype)requestWithURL:(NSURL *)theURL
    

    就是在初始化的时候指定url,cachePolicy以及timeoutinterval
    通过NSURLRequest可以设置HTTPMethod,默认是GET

    1.5 NSURLCache

    cache URL 请求返回的response。

    实现的方式是把NSURLRequest对象映射到NSCachedURLReponse对象。可以设置在内存中缓存的大小,以及在磁盘中缓存的大小和路径。不是特别需要的话,使用Shared Cached足以,如果有特别需要,创建一个NSURLCache对象,然后通过+ setSharedURLCache来设定
    

    当然,通过这个类也可以获得当前cache的使用情况。

    1.6 NSURLResponse NSHTTPURLResponse

    通过REST API进行资源操作的时候,有request必须就有response。NSURLResponse包含了metadata,例如返回的数据长度(expectedContentLength)MIME类型 text编码方式
    NSHTTPURLResponse是NSURLResponse的子类,由于绝大部分的REST都是HTTP的,所以,通常遇到的都NSHTTPURLResponse对象。通过这个对象可以获得:HTTP的headers,status Code等信息,其中:HTTP headers包含的信息较多

    1.7 NSURLCredential

    用来处理证书信息。比如用户名密码,服务器授权等,根据不同的认证方式来处理。

    基于用户名密码的认证

    + (NSURLCredential *)credentialWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persiste
    

    基于证书的

    + credentialWithIdentity:certificates:persistence
    

    1.8 NSURLAuthenticationChallenge

    在访问资源的时候,可能服务器会返回需要授权(提供一个NSURLCredential对象)。那么,URLSession:task:didReceiveChallenge:completionHandler被调用。需要的授权信息会保存在这个类的对象里。

    1.9 NSURLProtectionSpace

    这个类的对象代表了服务器上的一块需要授权信息的区域,通过这个对象信息来响应Challenge。比如:如果服务器需要一个基于用户名密码的认证,那么应该先参考下NSURLProtectionSpace对象的host,port,realm,protocol等信息,然后依照这个信息提供证书

    转载自https://blog.csdn.net/hello_hwc/article/details/44513699

    相关文章

      网友评论

          本文标题:IOS网络开发NSURLSession详解(一)概述

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