UI-Senior网络请求2--异步GET / POST

同步中我们总结了GET和POST的区别, 下面在开始请求数据之前总结一下同步和异步的区别, 方便理解本文, 不至于混淆.

首先, 要想实现网络访问, 必须在工程中的info.plist文件里添加:
网络请求,允许 Http 请求

Step1:

NSAppTransportSecurity 类型 Dictionary 下添加
NSAllowsArbitraryLoads 类型 Boolean ,值设为 YES

Step2:(在异步实现请求时, 可以使用block和代理两种方式, 在使用代理时, 需要遵循协议如下)

遵循NSURLConnectionDataDelegate协议

总结: 同步和异步的区别

  1. 同步和异步的区别是在接受数据的方法上, 由于两种请求方式的不同, 调用的获取数据的方法也不同.
    1.1 同步: 在获取数据的时候, 需要用定义一个NSData的数据来接受(而且只有一种获取数据的方式)
    1.2异步: 在获取数据的时候, 不需要再定义接受数据的对象, 因为在获取数据的方法中, 就已经给出了接受数据的Data对象
    1.3异步: 另外异步有两种获取数据的方式, block + 代理方式

1. 异步GET

- (void)getYB{
    
//第一步: 创建URL
    NSURL *url = [NSURL URLWithString:GET_URL];
    
//第二步: 创建请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

//第三步: 接收数据
    //方法一: Block
   
    //参数一: 请求对象
    //参数二: 线程队列 block在哪个线程中运行,[NSOperationQueue mainQueue]主队列(串行队列)
    //参数三: block
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        //response: 携带接口的信息
        //data: 请求回来的数据
        
        //判断错误信息
        if (connectionError == nil) {
            
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];
            NSLog(@"GET异步 = %@", dic);

        }
        
    }];
   #**********************上面是Block方式/ 下面是代理方式 两者实现一种就可以********************************* 
    //方法二: 代理
    //参数一: 请求对象
    //参数二: 代理人
    [NSURLConnection connectionWithRequest:request delegate:self];
    # 代理方法在文章结尾实现

}```

###2. 异步POST
```code
- (void)postYB{
    
//第一步: 创建URL地址
    NSURL *url = [NSURL URLWithString:POST_URL];
    
//第二步: 创建请求Request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
//第三步: 设置Body
    //1. 设置body信息
    NSString *bodyStr = POST_BODY;
    NSData *bodyData = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:bodyData];
    //2. 设置请求信息(大写)
    [request setHTTPMethod:@"POST"];
    
//第四步: 建立连接

    //第一种方法:BLOCK
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        
        //第五步: 判断错误信息
        if (connectionError == nil) {
            
            //解析数据
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];
            
            NSLog(@"Post异步 = %@", dic);
        }
        
    }];
    #**********************上面是Block方式/ 下面是代理方式 两者实现一种就可以********************************* 

    //第二种方法:代理
    [NSURLConnection connectionWithRequest:request delegate:self];
    # 代理方法在文章结尾实现
    
}```

###代理方法实现
```code
#pragma mark ************ 异步POST/GET代理方法 -------

//服务器开始响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    
    //初始化(在延展部分创建的全局数据源对象, 用来存放获取到的数据)
    self.resultData = [NSMutableData data];
    
}

//开始接受数据(该方法重复执行)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    
    //数据并不是一次性接受完成的, 所以需要将每次得到的数据拼接到self.resultData 中
    [self.resultData appendData:data];
    
    NSLog(@" ---- %@", self.resultData);
}

//结束服务器
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:(NSJSONReadingAllowFragments) error:nil];
    
    NSLog(@"GET代理 = %@", dic);
}```

你可能感兴趣的:(UI-Senior网络请求2--异步GET / POST)