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. NSString *string = [request responseString];
  8. }

这是一段简单的同步请求的代码。其中的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. NSString *string = [request responseString];
  4. }
  5. - (void)requestFailed:(ASIHTTPRequest *)request {
  6. NSError *error = [request error];
  7. if (error) {
  8. NSLog(@"request failed");
  9. }
  10. }

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

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

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

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

在异步请求中往往为了代码更加简洁可以使用代码块(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. [request setFailedBlock:^{
  10. NSError *error = [request error];
  11. if (error) {
  12. NSLog(@"request failed");
  13. }
  14. }];
  15. [request startAs

ASIHTTPRequest简单学习的更多相关文章

  1. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  2. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  3. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  4. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  5. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  6. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  7. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  8. mongodb,redis简单学习

     2.mongodb安装配置简单学习                   配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作                 ...

  9. html css的简单学习(三)

    html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...

随机推荐

  1. c# 中的 protected internal 如何在 vc.net 中实现

    c# 中有 protected internal 的复合访问属性, 保证assembly内部访问,以及外部的派生类访问 vc.net 中无法直接写上 protected internal, 其对应的写 ...

  2. JQuery:介绍、安装、选择器、属性操作、动画

    目录 jQuery 详细内容 1.JQuery介绍 2.JQuery的下载安装 3.JQuery的使用 4.jQuery的选择器 5.JQuery的属性操作 6.动画 6.自定义动画 jQuery 详 ...

  3. Eclipse - 安装了jd-eclipse插件后依然无法反编译类文件

    问题 Eclipse在安装了jd-eclipse插件后依然无法反编译类文件,这个问题是因为没有修改默认的类文件查看器. 解决方法 修改默认的类文件查看器为jd-eclipse Window -> ...

  4. Java | 基础归纳 | 随机数应用

    Java中一般有两种随机数,一个是Math中random()方法,一个是Random类. Math.random();//返回0~1的中随机数值 Random random = new Random( ...

  5. Codeforces 1132D(二分模拟)

    要点 二分显然,关键在于怎么判断 题解方法:开k个队列代表每个时间有哪些电脑会挂掉,这部分O(n)预处理一下,之后扫一遍时间,每个时间点贪心选取最靠前的会挂的电脑未雨绸缪给它充电,然后看看充电以后要不 ...

  6. HDU6308(2018多校第一场)

    Bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6308 将时间化简为分钟计算,同时不要用浮点数计算,精度会出现问题: 如果采用精度,最好加 ...

  7. foreach循环与迭代器循环 删除插入元素的区别

     (1)仅对其遍历而不修改容器大小时,只使用foreach循环 (2)需要边遍历边修改容器大小时(插入删除元素),只使用迭代器循环 import java.util.HashMap;import ja ...

  8. 087 Scramble String 扰乱字符串

    给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树.下图是字符串s1 = "great"的一种可能的表示形式.    great   /    \ ...

  9. python里面的list、tuple和dict的区别

    Dictionary .Dictionary是Python中内置的数据类型之一,他定义了键和值之间一对一的关系. 每一个元素都有一个key-value对,整个元素集合用大括号{}括起来. 你可以通过k ...

  10. 系统讲解一下,Dao,Entity,Servlet,Action各自有什么东西-Java/Web开发

    dao 主要是一些接口,里面定义了一些用于增删改查的方法名 daoImpl 就是对dao的具体实现 Service 同上,也是一些接口,主要是用来调用dao层的一些方法,所以这里定义的方法一般都定义好 ...