iOS网络编程-ASIHTTPRequest异步请求

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

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

5

ASIHTTPRequest和ASIFormDataRequest两个请求类都可以发送异步请求,ASIFormDataRequest继承了 ASIHTTPRequest异步请求方法,所以我们重点介绍ASIHTTPRequest的异步请求。异步请求后通过回调委托对象的方 法:requestFinished:和requestFailed:实现。修改主视图控制器MasterViewController.m的 startRequest方法如下:

-(void)startRequest

{

NSString *strURL = [[NSString alloc]

initWithFormat:

@”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”,

@”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”];

NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setDelegate:self];                                              ①

[request startAsynchronous];                                              ②

}

- (void)requestFinished:(ASIHTTPRequest *)request                                ③

{

NSData *data  = [request responseData];

NSDictionary *resDict = [NSJSONSerialization

JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

[self reloadView:resDict];

}

- (void)requestFailed:(ASIHTTPRequest *)request                              ④

{

NSError *error = [request error];

NSLog(@”%@”, [error localizedDescription]);

}


第①行代码[request setDelegate:self]设置委托对象为self,然后在第②行[request startAsynchronous]发起异步请求,服务器端返回成功则回调第③行的requestFinished:方法,失败则回调第④行的 requestFailed:方法,它们的参数都是ASIHTTPRequest类型。这两个方法是默认的回调方法,我们也可以自定义回调方法。因此上面 的代码也可以改为如下形式:

-(void)startRequest

{

… …

    [request setDidFinishSelector:@selector(requestSuccess:)];

    [request setDidFailSelector:@selector(requestError:)];

[request startAsynchronous];

}

- (void)requestSuccess:(ASIHTTPRequest *)request

{

NSData *data  = [request responseData];

NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data

options:NSJSONReadingAllowFragments error:nil];

[self reloadView:resDict];

}

- (void)requestError:(ASIHTTPRequest *)request

{

NSError *error = [request error];

NSLog(@”%@”, [error localizedDescription]);

}


通过请求对象的setDidFinishSelector:方法指定要回调成功方法,setDidFailSelector:方法指定要回调的失败方法。

在异步请求中往往为了使代码更加整洁可以使用代码块(Block),在代码块中指定回调方法。使用了代码的主视图控制器MasterViewController.m的startRequest方法如下:

-(void)startRequest

{

NSString *strURL = [[NSString alloc] initWithFormat:

@”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”,@”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”];

NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];

__weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];        ①

[request setCompletionBlock:^{                                           ②

NSData *data  = [request responseData];                               ③

NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data

options:NSJSONReadingAllowFragments error:nil];

[self reloadView:resDict];

}];

 

[request setFailedBlock:^{                                               ④

NSError *error = [request error];

NSLog(@”%@”, [error localizedDescription]);

}];

[request startAsynchronous];

}


目录
相关文章
|
10月前
|
缓存 iOS开发
IOS网络编程:使用 URLSession 实现网络请求的步骤是什么?
IOS网络编程:使用 URLSession 实现网络请求的步骤是什么?
141 1
|
3月前
|
数据采集 JavaScript 前端开发
异步请求在TypeScript网络爬虫中的应用
异步请求在TypeScript网络爬虫中的应用
|
7月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
148 56
|
10月前
|
移动开发 网络协议 安全
iOS审核在ipv6网络下无法访问服务器的问题及解决方案
iOS审核在ipv6网络下无法访问服务器的问题及解决方案
250 0
|
10月前
|
XML JSON API
IOS网络编程:介绍一下 Alamofire 库。
IOS网络编程:介绍一下 Alamofire 库。
218 3
|
10月前
|
缓存 JSON API
IOS网络编程:什么是 RESTful API?如何使用 RESTful 风格设计 API?
IOS网络编程:什么是 RESTful API?如何使用 RESTful 风格设计 API?
212 3
|
网络协议 安全 物联网
高效通信的新范式:探索异步请求在网络设计中的创新思路
本文将探讨一种新的网络设计范式,即使用异步请求来提高通信效率。传统的网络通信中,请求和响应是同步进行的,即发送请求后必须等待响应才能继续下一步操作,这样会导致通信效率低下。而通过引入异步请求的思想,可以在发送请求后不需要等待响应,而是可以立即进行其他操作,等到响应返回时再处理。这种设计思路可以大大提高通信效率,特别适用于网络延迟较高、带宽有限的情况。本文将详细阐述异步请求的原理和实现方式,并分析其在网络设计中的创新潜力。同时,还将探讨可能面临的挑战和解决方案,以及该创新思路对未来网络发展的影响。
147 0
高效通信的新范式:探索异步请求在网络设计中的创新思路
|
网络协议 安全 数据库
第二章TCP/IP—iOS网络七层模型
分层: 应用层 (Application): 网络服务与最终用户的一个接口。 协议有:HTTP FTP TFTP SMTP SNMP DNS 表示层(Presentation Layer): 数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层) 格式有,JPEG、ASCll、DECOIC、加密格式等 会话层(Session Layer): 建立、管理、终止会话。(在五层模型里面已经合并到了应用层) 对应主机进程,指本地主机与远程主机正在进行的会话 传输层 (Transport): 定义传输数据的协议端口号,以及流控和差错效验。
547 0
第二章TCP/IP—iOS网络七层模型

热门文章

最新文章