NSURLSession的介绍和说明

26 篇文章 0 订阅


相关组件

  • NSURLSession
  • NSURLSessionConfiguration
  • NSURLSessionDataTask
  • NSURLSessionUploadTask
  • NSURLSessionDownloadTask

与NSURLConnection对比

改进是可以配置每个session的缓存,协议,cookie以及credential policy。每个NSURLSession对象都是一个NSURLSessionConfiguration对象来进行初始化,指定那些策略和增强移动设备上性能选项。

NSURLSessionTask

负责处理数据的加载以及文件和数据在客户端与服务器之间的上传和下载。3个子类NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask可以直接使用。这三个子类完成最基本的网络任务,获取JSON或XML数据,上传和下载文件。

所有task都是可以取消,暂停或恢复的。当download task取消时,可以通过选项创建一个resume data传递给下一次新创建的download task继续download

Get请求

NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
          completionHandler:
     ^(NSData *data, NSURLResponse *response, NSError *error) {
          // ...
     }];

[task resume];

上传NSData

NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSData *data = ...;

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
          fromData:data
          completionHandler:
     ^(NSData *data, NSURLResponse *response, NSError *error) {
          // ...
     }];

[uploadTask resume];

下载

NSURL *URL = [NSURL URLWithString:@"http://example.com/file.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request
          completionHandler:
     ^(NSURL *location, NSURLResponse *response, NSError *error) {
         //download是一点点将数据写入本地临时文件,完成后需要将文件从临时地方转移到一个永久地址保存起来。
          NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
          NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];
          NSURL *newFileLocation = [documentsDirectoryURL URLByAppendingPathComponent:[[response URL] lastPathComponent]];
          [[NSFileManager defaultManager] copyItemAtURL:location toURL:newFileLocation error:nil];
}];

[downloadTask resume];

NSURLSession的delegate方法

NSURLSession的task的delegate用来处理鉴权查询,session的delegate处理连接层,如服务器信任,客户端证书评估,NTLM和Kerberos协议问题,task处理网络请求的如Basic,Digest以及Proxy authentication等。

表示请求结束的delegate是-URLSession:task:didCompleteWithError:

NSURLSessionConfiguration

可以找到任何你想要进行配置的选项。包括可用网络,cookie,安全性,缓存策略,自定义协议,启动事件的设置,移动设备优化。

NSURLSessionConfiguration的工厂方法

  • +defaultSessionConfiguration:标准configuration,具有相同共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentiaStorage
  • +ephemeralSessionConfiguration:实现秘密浏览,不会对缓存,Cookie和证书持久性存储
  • +backgroundSessionConfiguration:(NSString *)identifier:

配置属性

NSURLSessionConfiguration有20个可配属性。

基本配置

  • HTTPAdditionalHeaders:设置请求的header,跨session共享信息如内容类型,语言,User agent和Author
NSString *userPasswordString = [NSString stringWithFormat:@"%@:%@", user, password];
NSData * userPasswordData = [userPasswordString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64EncodedCredential = [userPasswordData base64EncodedStringWithOptions:0];
NSString *authString = [NSString stringWithFormat:@"Basic %@", base64EncodedCredential];
NSString *userAgentString = @"AppName/com.example.app (iPhone 5s; iOS 7.0.2; Scale/2.0)";

configuration.HTTPAdditionalHeaders = @{@"Accept": @"application/json",
     @"Accept-Language": @"en",
     @"Authorization": authString,
     @"User-Agent": userAgentString};
  • networkServiceType:一般不需要设置这个。
  • allowsCellularAccess和discretionary:后台传输使用discretionary这个属性。
  • timeoutIntervalForRequest和timeoutIntervalForResource:前者是packet之间请求时间。如果希望限制整体超时时间,使用后者timeoutIntervalForResource
  • HTTPMaximumConnectionsPerHost:限制连接到主机的数量
  • HTTPShouldUsePipelining:默认禁止,因为很多服务器没有支持
  • sessionSendsLaunchEvents:session是否应该从后台启动
  • connectionProxyDictionary:指定连接的代理服务器。

Cookie策略

  • HTTPCookieStorage:默认情况会使用NSHTTPCookieStorage的+sharedHTTPCookieStorage这个单例,跟NSURLConnection一样。
  • HTTPCookieAcceptPolicy:设置什么情况session应该接收服务器发出的cookie
  • HTTPShouldSetCookies:是否该存储cookie

安全策略

  • URLCredentialStorage:默认情况会使用NSURLCredentialStorage的+sharedCredentialStorage这个单例,跟NSURLConnection一样。
  • TLSMaximumSupportedProtocol和TLSMinimumSupportedProtocolLinux:是否支持SSL协议

缓存策略

  • URLCache:默认情况会使用NSURLCache的+sharedURLCache这个单例,跟NSURLConnection一样。
  • requestCachePolicy:设置什么时候应该缓存返回的响应。

自定义协议

  • protocolClasses:是NSURLProtocol的子类,配置自定义协议的数组。

除非注明,均为Starming星光社原创,微信公共号 starming-weixin 发现更多,转载请注明本文地址:http://www.starming.com/index.php?v=index&view=68

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
NSURLSessionCorrectedResumeData是一个iOS开发中的类,用于处理网络请求的断点续传功能。 在网络请求过程中,由于各种原因(如网络不稳定或用户手动停止请求),请求可能会中断。为了方便用户继续中断的请求,苹果提供了NSURLSessionCorrectedResumeData来恢复中断的请求。 NSURLSessionCorrectedResumeData是一个二进制数据,它包含了中断请求的具体信息,如请求的URL、请求的方法、请求头信息、请求体等。开发者可以将这个数据保存到本地,以便在下次启动应用时重新发起请求。 当应用再次启动并需要继续中断的请求时,开发者可以使用NSURLSession的resumeData属性来读取之前保存的NSURLSessionCorrectedResumeData数据。 然后,开发者可以通过NSURLSession的downloadTask(withCorrectedResumeData:completionHandler:)方法来恢复请求。这个方法会根据传入的NSURLSessionCorrectedResumeData创建一个下载任务,并在下载完成后调用回调函数。 需要注意的是,正确使用NSURLSessionCorrectedResumeData需要遵循一些特定的规则。比如,只有之前使用NSURLSession的downloadTask方法发起的请求才能使用相关的恢复方法,并且不能保证100%的恢复成功。 总结来说,NSURLSessionCorrectedResumeData提供了一种方便的方式来处理网络请求中的断点续传功能,并且提高了用户体验。通过保存和恢复NSURLSessionCorrectedResumeData数据,开发者可以更加灵活地处理中断的请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值