1 #import "ViewController.h" 2 #import "Header.h" 3 4 @interface ViewController ()<NSURLSessionDataDelegate> 5 6 /** 7 * 用于保存相关的数据 8 */ 9 @property (nonatomic, strong) NSMutableData *resultData; 10 11 @end 12 13 @implementation ViewController 14 15 - (void)viewDidLoad { 16 [super viewDidLoad]; 17 // Do any additional setup after loading the view, typically from a nib. 18 } 19 20 // 对数据进行加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别 21 // 要处理下载任务的使用使用此任务NSURLSessionDownloadTask 22 // 要处理上传任务使用:NSURLSessionUploadTask 23 24 #pragma mark - get请求(异步) 25 - (IBAction)getRequest:(UIButton *)sender { 26 27 // 1.创建url 28 NSURL *url = [NSURL URLWithString:GET_URL]; 29 30 31 // 2.创建session对象 32 // 参数一:模式的设置 33 /* 34 defaultSessionConfiguration 默认会话模式 35 ephemeralSessionConfiguration 瞬时会话模式 36 backgroundSessionConfigurationWithIdentifier 后台会话模式 37 */ 38 // 参数二:代理 39 // 参数三:线程队列 40 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 41 42 43 // 3.创建task对象 44 NSURLSessionDataTask *task = [session dataTaskWithURL:url]; 45 46 47 // 4.启动任务 48 [task resume]; 49 50 } 51 52 53 #pragma mark - 实现协议方法 54 // 服务器开始响应 55 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler { 56 57 // 允许服务器响应【在这个地方只有允许服务器响应了才会接收到数据】 58 completionHandler(NSURLSessionResponseAllow); 59 60 // 初始化data,稍后进行片段的拼接存储 61 self.resultData = [NSMutableData data]; 62 } 63 64 // 接收数据拼接 65 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { 66 67 // 反复执行,然后拼接相关的片段 68 [self.resultData appendData:data]; 69 } 70 71 // 数据接收完成,网络请求结束 72 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { 73 74 // 解析 75 if (error == nil) { 76 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil]; 77 NSLog(@"%@", dic); 78 } 79 } 80 81 @end