• Get的同步以及异步


    1.Get的同步请求

    - (NSURLRequest *)getLoginRequest

    
    

    {

        NSString *userName = _userName.text;
    
    

        NSString *password = [_password.text companyMD5];

    
    

        NSLog(@"%@", [_password.text MD5]);

    
    

        NSLog(@"%@", password);

        // 1. 网络地址URL

    
    

        NSString *urlString = [NSStringstringWithFormat:@"http://192.168.3.251/~apple/itcast/login.php?username=%@&password=%@", userName, password];

    
    

        urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        NSURL *url = [NSURL URLWithString:urlString];

        // 2. 请求

    
    

        // 1> url

    
    

        // 2> 缓存策略

    
    

        // 3> 超时时长

    
    

        // 提示:因为网络的状态是未知的,因此要使用URLRequest一定要指定超时时长

    
    

        // 否则会严重影响用户体验!

    
    

        return [NSURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:2.0f];

    15 
    16 #pragma mark 同步登录请求
    17 - (IBAction)syncLogin
    18 {
    19     // 1. 建立请求
    20     NSURLRequest *request = [self getLoginRequest];
    21     
    22     // 在OC中,凡是看到__autoreleasing标示符的,表示参数需要传入地址,所谓地址就是添加“&”
    23     NSURLResponse *response = nil;
    24     NSError *error = nil;
    25     
    26     // 同步请求的应用场景:例如:网银账户的登录!
    27     // 一定要获取到某个网络返回数据后,才能进行下一步操作的场景!
    28     // 发送同步请求,respone&error要带地址的原因就是为了方法执行后,能够方便使用response&error
    29     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    30     
    31     // 提示,上面的网络同步请求不完成,下面一句话是不会执行到的!
    32     if (data != nil) {
    33         // 网络请求正常
    34         
    35         // 将data转换为字符串
    36         NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    37         
    38         [self showMessageWithResult:result];
    39     } else if (data == nil && error == nil) {
    40         // 网络返回空数据
    41         NSLog(@"接收到空数据");
    42     } else {
    43         NSLog(@"%@", error.localizedDescription);
    44     }
    45 }

    2.Get的异步登陆方法

     1 - (NSURLRequest *)getLoginRequest
     2 {
     3     NSString *userName = _userName.text;
     4     NSString *password = [_password.text companyMD5];
     5     NSLog(@"%@", [_password.text MD5]);
     6     NSLog(@"%@", password);
     7     
     8     // 1. 网络地址URL
     9     NSString *urlString = [NSString stringWithFormat:@"http://192.168.3.251/~apple/itcast/login.php?username=%@&password=%@", userName, password];
    10     urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    11     
    12     NSURL *url = [NSURL URLWithString:urlString];
    13     
    14     // 2. 请求
    15     // 1> url
    16     // 2> 缓存策略
    17     // 3> 超时时长
    18     // 提示:因为网络的状态是未知的,因此要使用URLRequest一定要指定超时时长
    19     // 否则会严重影响用户体验!
    20     return [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
    21    
    22 }
    23 
    24 
    25 - (IBAction)asyncLogin
    26 {
    27     // 1. request
    28     NSURLRequest *request = [self getLoginRequest];
    29     
    30     // 异步登录
    31     // 后台耗时的任务,与界面无关的操作会放在后台线程中执行。
    32     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    33     
    34     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    35         // 块代码的内容会在网络访问后执行
    36         // 块代码是预先定义好的代码片段,在满足某个条件时执行的。
    37         NSLog(@"%@", [NSThread currentThread]);
    38         
    39         if (data != nil) {
    40             // 网络请求正常
    41             
    42             // 将data转换为字符串
    43             NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    44             
    45             [[NSOperationQueue mainQueue] addOperationWithBlock:^{
    46                 [self showMessageWithResult:result];
    47             }];
    48         } else if (data == nil && connectionError == nil) {
    49             // 网络返回空数据
    50             NSLog(@"接收到空数据");
    51         } else {
    52             NSLog(@"%@", connectionError.localizedDescription);
    53         }
    54     }];
    55     
    56     NSLog(@"come here");
    57 }
  • 相关阅读:
    python常见异常
    python+selenium动态抓取网页数据
    python基于scrapy配置日志
    Python依赖
    nginx配置详解
    Centos 用户登录失败N次后锁定用户禁止登陆
    CENTOS 7 firewalld详解,添加删除策略
    Centos7搭建Zookeeper 3.4.14集群
    Centos7安装FastDFS整合nginx
    VMware VCSA 6.7配置vSAN存储
  • 原文地址:https://www.cnblogs.com/hkyangvip/p/3496686.html
Copyright © 2020-2023  润新知