首页投稿(暂停使用,暂停投稿)

iOS-网络编程(网络请求组件)

2016-08-14  本文已影响107人  如风家的秘密

1 NSURLConnection网络组件(iOS7之前的)

CFNetWork 是一种低层的高性能架构,它是基于BSD sockets的基础上做了拓展,是全部网络请求组件的父类

NSURLConnection网络组件结构图

2 NSURLSession网络组件

iOS7之后,苹果推出NSURLConnection 的继任者:NSURLSession

NSURLSession网络组件结构图

NSURLSession网络组件的使用流程
1.构造NSURL实例(链接地址)
2.构造NSURLRequest请求
3.构造NSURLSessionConfiguration(可选)
4.构造NSURLSession
5.构造NSURLSessionTask
6.构造NSURLSession发送请求

客户端通过NSURLSession与服务器对话

1 NSURLRequest 用于存储客户端发送给服务器的数据包信息和请求设置
2 NSURLRequest 只有很少的基本设置选项,我大部分使用其子类:NSMutableURLRequest

1 NSURLResponse用于存储服务器返回的响应包数据
2 如果发送的是HTTP请求,那么使用其子类:NSHTTPURLResponse

NSResponse示例代码:

NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
//响应的状态码
􏰘􏰙􏰍􏰚􏰛􏰜NSInteger statusCode = httpResponse.statusCode;
//􏰘􏰙􏰝􏰞􏰟响应头信息
NSDictionary *allHeaderFields = httpResponse.allHeaderFields;
//取得响应头中的信息项
􏰠􏰡􏰘􏰙􏰝􏰢􏰍􏰞􏰟􏰣NSString *contentType = [allHeaderFields objectForKey:@“Content-Type"];

1 NSURLSession 指的是一个网络会话(Session),一个网络会话可以发起多个任务(Task)
2 一个任务(Task)对应了一次网络请求
3 Session的类型:

1 +defaultSessionConfiguration 用于创建默认类型的Session对象
2 +ephemeralSessionConfiguration 用于创建临时类型的Session对象
3 +backgroundSessionConfiguration:(NSString *)identifier 用于创建后台Session对象
4 NSURLSessionConfiguration 封装了很多配置属性,熟练配置这些属性,可以让网络请求充分利用其网络环境
requestCachePolicy :缓存策略
networkServiceType:网络服务类型:网络流量,网络电话,语音,视频
timeoutIntervalForRequest: 超时时间
HTTPAdditionalHeaders: 请求头
discretionary: 用于后台请求,会把WiFi和电量考虑在内.
allowsCellularAccess : 是否允许使用蜂窝数据

sessionWithConfiguration:sessionConfig];

1 一个Session可以发起的多个网络请求任务(Task)
2 三种类型的任务:(Task)
 1  数据任务(NSURLSessionDataTask):

数据任务擅长处理小且频繁的应用程序与服务器之间的请求,
例如:请求JSON数据,因为数据任务不会将数据存储到磁盘文件中,所以不支持后台Session
2 下载任务(NSURLSessionDownLoadTask):
以文件的形式接收数据,可以在程序没有运行时进行后台下载
3 上传任务(NSURLSessionUpLoadTask):
以文件的形式发送数据,可以在程序没有运行时进行后台上传

NSURLSessionTask的关系

3.1 实例代码:
3.11. NSURLSessionDataTask 对象的创建都是通过Session对象的方法创建,创建任务代码如下:

     NSURLSessionDataTask *task =  [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {       
   
}];

3.1.2 上传文件任务的创建:

// fileURL:上传文件的路径
 - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest*)requestfromFile:(NSURL *)fileURLcompletionHandler:(void (^)(NSData *data, NSURLResponse *response,NSError *error))completionHandler

// fromDatadata:上传文件的data
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest
*)requestfromData:(NSData *)bodyDatacompletionHandler:(void (^)(NSData *data, NSURLResponse *response,NSError *error))completionHandler

上传任务请求网络,请求包必须符合如下格式:

上传文件的请求包必须符合的格式

3.1.3 下载任务的创建:

   // location
    - (NSURLSessionDownloadTask       *)downloadTaskWithRequest:(NSURLRequest*)requestcompletionHandler:(void (^)(NSURL *location, NSURLResponse*response, NSError *error))completionHandler

  - (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)urlcompletionHandler:(void (^)(NSURL *location, NSURLResponse*response, NSError *error))completionHandler
  // resumeData: - (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData
  *)resumeDatacompletionHandler:(void (^)(NSURL *location, NSURLResponse*response, NSError *error))completionHandler

下载任务演示

上一篇下一篇

猜你喜欢

热点阅读