网络编程(二)NSURLSessionConfiguration

1.NSURLSession有三种工作模式

(1)defaultSessionConfiguration(默认):使用的是基于磁盘缓存的持久化策略,Cache,Cookie。

(2)ephemeralSessionConfiguration(短暂):该模式不使用磁盘保存任何数据。所有和会话相关的caches,证书,cookies等都被保存在RAM中,因此当程序使会话无效,这些缓存的数据就会被自动清空。

(3)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier(后台):在后台完成上传和下载,在创建Configuration对象的时候需要提供一个NSString类型的标识。

 我们可以设置NSURLSessionConfiguration的相关属性来对NSURLSession进行配置,如果不对NSURLSession进行配置,采用默认的工作模式。

下面上代码:

- (void)configSession
{
    //1.构造URL
    NSURL *url = [NSURL URLWithString:@"http://news-at.zhihu.com/api/3/news/latest"];
    //2.配置NSURLSessionConfiguration
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    //允许使用蜂窝网络
    config.allowsCellularAccess = YES;
    //设置超时时间(秒)
    config.timeoutIntervalForRequest = 10;
    
    //3.创建session对象时使用config进行配置
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    //4.创建网络任务
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url];
    //5.发送网络请求
    [dataTask resume];
    
}

 发送网络请求后要在代理里面进行相关操作

这里代理遵守的协议有很多种可以选择,根据网络任务(Task)的不同遵守不同的协议,本例遵守<NSURLSessionDataDelegate>协议

#pragma mark - NSURLSessionDataDelegate 

//监听网络传输完成的事件
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(nullable NSError *)error {
    
    NSLog(@"网络传输完成");
    
}

//收到了响应包中的状态码以及响应头数据,只会被调用一次
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    
    NSLog(@"响应状态码:%ld", httpResponse.statusCode);
    
    //NSURLSessionResponseAllow:继续传输响应体数据
    //NSURLSessionResponseCancel:取消当前传输,相当于task cancel
    completionHandler(NSURLSessionResponseAllow);
    
}

//收到响应体的数据--此方法可能会被调用多次
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    
    //如果要获取到完整的数据要创建一个全局的NSMutableData对每次接收到的data进行拼接
    NSLog(@"每次接收到数据包的长度:%li", data.length);
    
}

 

转载于:https://www.cnblogs.com/wlll/p/5167614.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值