• NSURLSession下载文件-代理


    - 3.1 涉及知识点

    (1)创建NSURLSession对象,设置代理(默认配置)
    ```objc
     //1.创建NSURLSession,并设置代理
        /*
         第一个参数:session对象的全局配置设置,一般使用默认配置就可以
         第二个参数:谁成为session对象的代理
         第三个参数:代理方法在哪个队列中执行(在哪个线程中调用),如果是主队列那么在主线程中执行,如果是非主队列,那么在子线程中执行
         */
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    ```

    (2)根据Session对象创建一个NSURLSessionDataTask任务(post和get选择)
    //创建task
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_01.png"];
    
    //注意:如果要发送POST请求,那么请使用dataTaskWithRequest,设置一些请求头信息
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url];

    (3)执行任务(其它方法,如暂停、取消等)
        //启动task
        [dataTask resume];
        //其它方法,如取消任务,暂停任务等
        [dataTask cancel];
        [dataTask suspend];

    (4)遵守代理协议,实现代理方法(3个相关的代理方法)
    1.当接收到服务器响应的时候调用
         session:发送请求的session对象
         dataTask:根据NSURLSession创建的task任务
         response:服务器响应信息(响应头)
         completionHandler:通过该block回调,告诉服务器端是否接收返回的数据
    -(void)URLSession:(nonnull NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler
    
     2.当接收到服务器返回的数据时调用
     该方法可能会被调用多次
    -(void)URLSession:(nonnull NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveData:(nonnull NSData *)data
    
     3.当请求完成之后调用该方法
     不论是请求成功还是请求失败都调用该方法,如果请求失败,那么error对象有值,否则那么error对象为空
    -(void)URLSession:(nonnull NSURLSession *)session task:(nonnull NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error

    (5)当接收到服务器响应的时候,告诉服务器接收数据(调用block)
        默认情况下,当接收到服务器响应之后,服务器认为客户端不需要接收数据,所以后面的代理方法不会调用
        如果需要继续接收服务器返回的数据,那么需要调用block,并传入对应的策略
    
        /*
            NSURLSessionResponseCancel = 0, 取消任务
            NSURLSessionResponseAllow = 1,  接收任务
            NSURLSessionResponseBecomeDownload = 2, 转变成下载
            NSURLSessionResponseBecomeStream NS_ENUM_AVAILABLE(10_11, 9_0) = 3, 转变成流
        */
    
        completionHandler(NSURLSessionResponseAllow);
  • 相关阅读:
    友盟上报 IOS
    UTF8编码
    Hill加密算法
    Base64编码
    Logistic Regression 算法向量化实现及心得
    152. Maximum Product Subarray(中等, 神奇的 swap)
    216. Combination Sum III(medium, backtrack, 本类问题做的最快的一次)
    77. Combinations(medium, backtrack, 重要, 弄了1小时)
    47. Permutations II(medium, backtrack, 重要, 条件较难思考)
    3.5 find() 判断是否存在某元素
  • 原文地址:https://www.cnblogs.com/HMJ-29/p/4943903.html
Copyright © 2020-2023  润新知