zoukankan      html  css  js  c++  java
  • 网络编程(二)NSURLSessionConfiguration

    1.NSURLSession有三种工作模式

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

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

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

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

    下面上代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    - (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>协议

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #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);
         
    }
  • 相关阅读:
    【Github】github图片显示不出
    【Linux】docker安装FastDFS
    【Github】问题解决:Failed to connect to github.com port 443: Operation timed out
    python生成1000w的mysql测试数据
    python 瀑布流
    django使用url路径组合搜索
    将规定的文件以及文件夹,压缩打包
    定期清理iis_log日志文件
    自己开发的python分页插件
    使用IO多路复用selectors模块写上传下载功能
  • 原文地址:https://www.cnblogs.com/luoxiaofu/p/5220752.html
Copyright © 2011-2022 走看看