zoukankan      html  css  js  c++  java
  • NSURLSessionConfiguration-02-网络

      1 //
      2 //  ViewController.m
      3 //  02-NSURLSessionConfiguration
      4 //
      5 //  Created by kangkathy on 15/11/25.
      6 //  Copyright © 2015年 kangkathy. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 
     11 @interface ViewController ()
     12 
     13 @end
     14 
     15 @implementation ViewController
     16 
     17 - (void)viewDidLoad {
     18     [super viewDidLoad];
     19     // Do any additional setup after loading the view, typically from a nib.
     20     
     21     
     22     //需求:使用NSURLSessionConfiguration来配置Session
     23     /*
     24      网络请求的流程:
     25      1.构造NSURL连接地址
     26      2.构造NSURLRequest请求对象,包含请求头和请求体信息。
     27      3.构造NSURLSessionConfiguration
     28      4.构造NSURLSession会话对象
     29      5.创建请求任务
     30      6.发送网络请求
     31      
     32      */
     33     
     34     NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"];
     35     
     36     //设置Configuration对象
     37 //    requestCachePolicy : 设置缓存策略
     38 //    networkServiceType : 设置网络服务的类型:网络流量,网络电话,语音,视频..
     39 //    timeoutIntervalForRequest:设置超时时间
     40 //    HTTPAdditionalHeaders : 设置请求头
     41 //    discretionary : 用于后台请求,会把WiFi和电量的可用性考虑在内
     42 //    allowsCellularAccess : 是否允许使用蜂窝数据
     43     
     44     NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
     45     
     46     config.timeoutIntervalForRequest = 15;
     47     config.allowsCellularAccess = YES;
     48     
     49     //通过Configuration对象来创建session
     50     //通过代理协议方法来监听数据下载的过程
     51     /*
     52      协议继承关系:3遵守2,2遵守1,因此3包含了所有1,2协议中的方法声明
     53      1.NSURLSessionDelegate
     54      2.NSURLSessionTaskDelegate
     55      3.NSURLSessionDataDelegate
     56      */
     57     NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
     58     
     59     //使用代理协议监听数据加载后就不能再使用block来监听。
     60     NSURLSessionTask *task = [session dataTaskWithURL:url];
     61     
     62     [task resume];
     63     
     64     
     65     
     66 }
     67 
     68 #pragma mark - NSURLSessionDelegate
     69 
     70 //接收到响应头时会调用此协议方法
     71 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
     72     
     73     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
     74     
     75     NSLog(@"StatusCode:%li", httpResponse.statusCode);
     76     
     77     NSLog(@"%@", httpResponse);
     78     
     79     
     80     //可以继续加载,必须允许后才能加载响应体数据
     81     completionHandler(NSURLSessionResponseAllow);
     82     
     83     
     84     /*NSURLSessionResponseCancel = 0, 相当于[task cancel]                                         NSURLSessionResponseAllow = 1  继续正常传输 NSURLSessionResponseBecomeDownload = 2, 把dataTask转成downLoadTask                                 NSURLSessionResponseBecomeStream =3 转成streamTask
     85     */
     86     
     87     
     88 }
     89 
     90 //响应体中的数据每次接收一个数据包时会调用此协议方法,此协议方法可能会被调用多次。
     91 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
     92     
     93     NSLog(@"data:%li", data.length);
     94     
     95 }
     96 
     97 
     98 //此协议方法声明在NSURLSessionTaskDelegate中,当任务加载完成后会调用,数据此时已传输完毕。
     99 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    100     
    101     NSLog(@"网络请求完成");
    102     
    103 }
    104 
    105 
    106 
    107 
    108 @end
    时光见证了成长,还很无知,我想一点点幼稚转为有知!
  • 相关阅读:
    android adb
    5 个免费的受欢迎的 SQLite 管理工具
    [Android]通过setImageURI设置网络上面的图片
    Android TextView实现长按复制文本功能的方法
    View工作原理(四)view的layout过程
    Anaroid WebView详解大全
    Android 如何在Eclipse中查看Android API源码以及support包源码
    关于Android的.so文件你所需要知道的
    AS问题解决系列3—iCCP: Not recognizing known sRGB profile(转)
    安卓App设计博文
  • 原文地址:https://www.cnblogs.com/foreveriOS/p/5429859.html
Copyright © 2011-2022 走看看