• ASIHTTPRequest简单学习


    ASIHTTPRequest框架是优秀的第三方Objective-C的HTTP框架,支持Mac OS X和iOS下的HTTP开发。

     

     

    一、ASIHTTPRequest框架的安装和配置

    (1)首先要在项目工程中导入相关的文件,包括:ASIHttpRequest文件夹和Reachability文件夹。

    (2)要导入相关的支持类库和框架。包括:

    CFNetwork.framework
    SystemConfiguration.framework
    MobileCoreServices.framework

    libz.dylib

    (3)由于ASIHTTPRequest是不支持ARC的,所以在添加了ARC特性的项目中就会出现ARC报错,解决的方法也很简单,对ASIHTTPRequest的相关文件添加ARC特性,做法就是在target中选择Build Phases,再选择compile sources中ASIHTTPRequest的文件,双击弹出对话框,添加参数“-fno-objc-arc”。问题解决。

     

    二、同步请求

    首先需要导入ASIHTTPRequest头文件。

     

    1. NSString *urlString = @"*****";  
    2.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];  
    3.     [request startSynchronous];  
    4.     NSError *error = [request error];  
    5.     if (!error) {  
    6.         NSData *data = [request responseData];  
    7.           
    8.         NSString *string = [request responseString];  
    9.     }  


    这是一段简单的同步请求的代码。其中的responseData返回的是二进制数据,而responseString返回的是文本数据。

     

     

    三、异步请求

    附注:我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好。因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的很多。等待过程中在状态栏上会出现网络等待指示器的经典旋 转小图标,而使用ASIHTTPRequest异步请求就实现这些效果,不用自己额外编写代码。

    异步请求需要实现代理方法

     

    1. NSString *urlString = @"*****";  
    2.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];  
    3.     [request setDelegate:self];  
    4.     [request startAsynchronous];   


    需要实现两个代理方法:

     

     

    1. - (void)requestFinished:(ASIHTTPRequest *)request {  
    2.     NSData *data = [request responseData];  
    3.       
    4.     NSString *string = [request responseString];  
    5. }  
    6. - (void)requestFailed:(ASIHTTPRequest *)request {  
    7.     NSError *error = [request error];  
    8.     if (error) {  
    9.         NSLog(@"request failed");  
    10.     }  
    11. }  

     

     

    这两个方法是默认的回调方法,从服务器获取数据成功就回调第一个方法,否则回调第二个方法。当然也可以自己定义回调方法。

     

    1. [request setDidFinishSelector:@selector(requestSuccess:)];  
    2.     [request setDidFailSelector:@selector(requestError:)];  


    然后再实现这两个自定义的回调方法。

     

     

    1. - (void)requestSuccess:(ASIHTTPRequest *)request {  
    2.     NSData *data = [request responseData];  
    3.       
    4.     NSString *string = [request responseString];  
    5. }  
    6. - (void)requestError:(ASIHTTPRequest *)request {  
    7.     NSError *error = [request error];  
    8.     if (error) {  
    9.         NSLog(@"request failed");  
    10.     }  
    11. }  

     

    在异步请求中往往为了代码更加简洁可以使用代码块(block),在代码块中指定回调方法。

     

    1. NSString *urlString = @"*****";  
    2.     __weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];  
    3.     [request setCompletionBlock:^{  
    4.         // Use when fetching text data  
    5.         NSString *responseString = [request responseString];  
    6.         // Use when fetching binary data  
    7.         NSData *responseData = [request responseData];  
    8.     }];  
    9.       
    10.     [request setFailedBlock:^{  
    11.         NSError *error = [request error];  
    12.         if (error) {  
    13.             NSLog(@"request failed");  
    14.         }  
    15.     }];  
    16.       
    17.     [request startAs
  • 相关阅读:
    NLP---word2vec的python实现
    matplotlib---Annotation标注
    matplotlib---legend图例
    matplotlib---设置坐标轴
    windows下右键新建md文件
    vue+webpack+npm 环境内存溢出解决办法
    element-ui tree树形组件自定义实现可展开选择表格
    vue-动态验证码
    ES6 数组函数forEach()、map()、filter()、find()、every()、some()、reduce()
    eslint配置文件规则
  • 原文地址:https://www.cnblogs.com/yulang314/p/3550456.html
Copyright © 2020-2023  润新知