我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好。因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的很多。等待过程中在状态栏上会出现网络等待指示器的经典旋 转小图标,而使用ASIHTTPRequest异步请求就实现这些效果,不用自己额外编写代码。
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]; }
相关推荐
- 异步请求使用 `-startAsynchronous`,在后台线程执行,主线程处理 UI。 - 同步请求使用 `-startSynchronous`,通常避免在主线程使用,以免阻塞用户界面。 3. **回调处理**: - `-setCompletionBlock:` 和 `-...
ASIHTTPRequest 是一个流行的 iOS 和 Mac OS X 平台上的 HTTP 请求库,由 Alexey Sokolov 开发。这个库提供了一种简单的方式来发起 HTTP 请求,处理响应,并且在 Objective-C 中进行网络编程时提供了很多便利。在...
虽然ASIHttpRequest已经不再维护,但它仍然能作为学习网络编程的基础,尤其是对于那些需要理解网络请求工作流程的初学者来说,这是一个很好的起点。同时,熟悉ASIHttpRequest后,转学更现代的网络库如Alamofire或...
总的来说,网络异步请求是iOS开发中的基础技能,而ASIHttpRequest库则提供了一种简单而强大的方式来实现这一功能。熟悉并掌握这一库的使用,将有助于提升开发效率,创建出更加健壮和用户体验良好的应用。
在iOS开发中,网络请求是必不可少的一部分,ASIHttpRequest框架通过封装底层的CFNetwork,简化了网络编程的复杂性。它提供了以下主要功能: 1. **异步请求**:ASIHttpRequest支持后台线程处理网络请求,不会阻塞...
iOS网络编程模型主要围绕着三个层次展开:Cocoa层、Core Foundation层以及OS层。Cocoa层是最上层,提供了一系列Objective-C API,包括URL访问(NSURL)、流(NSStream)、Bonjour服务发现、Game Kit以及WebKit,这些...
- 发送请求:调用`-[ASIHTTPRequest startAsynchronous]`启动异步请求。 - 处理响应:重写`-[ASIHTTPRequest setCompletionBlock:]`和`-[ASIHTTPRequest setErrorBlock:]`以处理成功和失败的情况。 2. **...
这个源码包包含了ASIHTTPRequest库的完整源代码,对于深入理解网络请求处理流程以及iOS/Mac应用的网络编程具有很高的学习价值。 ASIHTTPRequest的主要特点包括: 1. **异步请求处理**:ASIHTTPRequest支持异步发送...
ASIHTTPRequest提供了一套完整的请求管理机制,包括异步请求、上传/下载进度跟踪、自动处理cookies等功能,让开发者能更高效地构建网络功能丰富的iOS应用。 二、核心特性 1. **异步请求**:ASIHTTPRequest支持异步...
1. **异步请求**:ASIHTTPRequest支持异步网络请求,这意味着可以在不阻塞用户界面的情况下发送请求。这通过在后台线程执行网络操作并使用代理方法更新UI来实现。 2. **请求队列**:ASIHTTPRequest提供了请求队列,...
2. **异步处理**:ASIHTTPRequest支持异步请求,这意味着可以在不阻塞用户界面的情况下发送网络请求,提高应用的响应性。 3. **缓存**:该库内置了缓存机制,可以自动或手动缓存HTTP响应,减少不必要的网络流量,...
1. **异步与同步请求**:ASIHTTPRequest提供了异步请求的能力,允许应用程序在等待服务器响应的同时执行其他任务,提高了用户体验。同时,它也支持同步请求,适合在后台线程中使用,避免阻塞主线程。 2. **文件上传...
2. **异步请求**:ASIHttpRequest支持异步请求,这样可以在请求后台执行时不影响用户界面。通过调用`-[ASIHttpRequest startAsynchronous]`方法,请求将在后台线程中启动。 3. **请求回调**:ASIHttpRequest提供了...
2. **异步请求**:ASIHTTPRequest支持异步请求,允许在请求处理的同时更新用户界面,提高了应用的响应性。 3. **缓存机制**:它内置了HTTP响应缓存,可以节省网络带宽,提高应用性能,并在离线状态下提供数据。 4....
为了处理异步请求,ASIHTTP提供了`-[ASIHTTPRequest startAsynchronous]`方法,这样可以在后台线程中执行请求,不会阻塞主线程,保证了应用的流畅性。同时,通过实现`ASIHTTPRequestDelegate`协议,可以监听请求的...
1. 异步请求:ASIHTTPRequest 支持异步请求,这意味着在发送请求时,应用程序可以继续执行其他任务,而不会阻塞用户界面。这提高了应用的响应速度和用户体验。 2. 请求队列:ASIHTTPRequest 包含一个请求队列,允许...
7. **异步与同步请求**:ASIHTTPRequest支持异步和同步两种模式,异步请求在后台线程运行,不会阻塞主线程;同步请求则会等待请求完成才返回。 8. **处理响应**:库提供了一系列方法处理HTTP响应,如`-...
2. **异步请求**:ASIHTTPRequest支持异步请求,这允许应用程序在等待网络响应的同时执行其他操作,提高了用户体验。 3. **缓存支持**:它内置了对HTTP缓存的支持,可以自动处理缓存策略,减少不必要的网络请求。 ...
ASIHTTPRequest是一个经典的网络请求库,它提供了丰富的功能来帮助开发者处理这些需求。本篇文章将详细讲解如何利用ASIHTTPRequest实现异步队列下载图片,并结合进度条显示下载动态。 首先,了解ASIHTTPRequest框架...