美文网首页
NSURLSession

NSURLSession

作者: Lovell_ | 来源:发表于2017-09-28 16:52 被阅读15次

    一、概述

    NSURLSession包括5个部分:
    NSURLRequest,
    NSURLCache,
    NSURLSession,
    NSURLSessionConfiguration,
    NSURLSessionTask。

    二、NSURLSession的几个核心类

    2.1 NSURLSessionConfiguration
    NSURLSession的配置信息。这些配置信息决定了NSURLSession的种类,HTTP的额外headers,请求的timeout时间,Cookie的接受策略等配置信息。更多的参见官方文档。

    这里大概阐述下决定NSURLSession种类的三种NSURLSessionConfiguration:
    a.

    +(NSURLSessionConfiguration *)defaultSessionConfiguration

    defaultSession,使用基于硬盘的持久话Cache,保存用户的证书到钥匙串,使用共享cookie存储

    b.

    +(NSURLSessionConfiguration *)ephemeralSessionConfiguration
    配置信息和default大致相同。除了,不会把cache,证书,或者任何和Session相关的数据存储到硬盘,而是存储在内存中,生命周期和Session一致。比如浏览器无痕浏览等功能就可以基于这个来做。

    c.

    +(NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier
    创建一个可以在后台甚至APP已经关闭的时候仍然在传输数据的会话。注意,后台Session一定要在创建的时候赋予一个唯一的identifier,这样在APP下次运行的时候,能够根据identifier来进行相关的区分。如果用户关闭了APP,IOS 系统会关闭所有的background Session。而且,被用户强制关闭了以后,IOS系统不会主动唤醒APP,只有用户下次启动了APP,数据传输才会继续。

    2.2 NSURLSessionTask
    session任务分三种:

    DataTask -用来请求资源,然后服务器返回数据,再内存中存储为NSData格式。default,ephemeral,shared Session支持data task。background session不支持。
    Upload Task-和DataTask类似,只不过在请求的时候提供了request body。并且background Session支持 upload task。
    Download Task-下载内容到硬盘上,所有类型的Session都支持。

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

    2.3 NSURLSession

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

    //Configuration来配置,初始化session
    self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    
    //创建一个task
    NSURLSessionDataTask * dataTask = [self.session dataTaskWithURL:[NSURL URLWithString:imageURL] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        }];
    
    //开始
    [dataTask resume];
    
    

    2.4 NSURLRequest

    指定请求的URL和cache策略。
    就是在初始化的时候指定url,cachePolicy以及 timeoutInterval.
    通过NSURLRequest可以设置HTTPMethod,默认是GET

    (instancetype)requestWithURL:(NSURL *)theURL  cachePolicy:(NSURLRequestCachePolicy)cachePolicy  timeoutInterval:(NSTimeInterval)timeoutInterval
    
    

    2.5 NSURLCache

    cache URL请求返回的response。
    当然,通过这个类也可以获得到当前cache的使用情况。

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

    2.6 NSURLResponse/NSHTTPURLResponse

    通过REST API进行资源操作的时候,有request(请求)必然就有response(响应)。

    NSURLResponse中包含了metadata,例如返回的数据长度(expectedContentLength),MIME 类型,text编码方式。

    NSHTTPURLResponse是NSURLResponse的子类,由于绝大部分的REST都是HTTP的,所以,通常遇到的都是NSHTTPURLResponse对象。通过这个对象可以获得:HTTP的headers,status Code等信息。

    2.7 NSURLCredential

    • 用来处理证书信息

    相关文章

      网友评论

          本文标题:NSURLSession

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