`

iOS网络编程-ASIHTTPRequest异步请求

阅读更多

我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好。因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的很多。等待过程中在状态栏上会出现网络等待指示器的经典旋 转小图标,而使用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];

}

 

分享到:
评论

相关推荐

    改进版 iOS 网络请求类库ASIHTTPRequest

    - 异步请求使用 `-startAsynchronous`,在后台线程执行,主线程处理 UI。 - 同步请求使用 `-startSynchronous`,通常避免在主线程使用,以免阻塞用户界面。 3. **回调处理**: - `-setCompletionBlock:` 和 `-...

    asihttprequest带demo代码包

    ASIHTTPRequest 是一个流行的 iOS 和 Mac OS X 平台上的 HTTP 请求库,由 Alexey Sokolov 开发。这个库提供了一种简单的方式来发起 HTTP 请求,处理响应,并且在 Objective-C 中进行网络编程时提供了很多便利。在...

    注释很详细ASIHttpRequest

    虽然ASIHttpRequest已经不再维护,但它仍然能作为学习网络编程的基础,尤其是对于那些需要理解网络请求工作流程的初学者来说,这是一个很好的起点。同时,熟悉ASIHttpRequest后,转学更现代的网络库如Alamofire或...

    网络异步请求

    总的来说,网络异步请求是iOS开发中的基础技能,而ASIHttpRequest库则提供了一种简单而强大的方式来实现这一功能。熟悉并掌握这一库的使用,将有助于提升开发效率,创建出更加健壮和用户体验良好的应用。

    ASIHttpRequest ios开发框架

    在iOS开发中,网络请求是必不可少的一部分,ASIHttpRequest框架通过封装底层的CFNetwork,简化了网络编程的复杂性。它提供了以下主要功能: 1. **异步请求**:ASIHttpRequest支持后台线程处理网络请求,不会阻塞...

    iOS网络编程模型.pdf

    iOS网络编程模型主要围绕着三个层次展开:Cocoa层、Core Foundation层以及OS层。Cocoa层是最上层,提供了一系列Objective-C API,包括URL访问(NSURL)、流(NSStream)、Bonjour服务发现、Game Kit以及WebKit,这些...

    ASI简单使用

    - 发送请求:调用`-[ASIHTTPRequest startAsynchronous]`启动异步请求。 - 处理响应:重写`-[ASIHTTPRequest setCompletionBlock:]`和`-[ASIHTTPRequest setErrorBlock:]`以处理成功和失败的情况。 2. **...

    ASIHTTPRequest 源码

    这个源码包包含了ASIHTTPRequest库的完整源代码,对于深入理解网络请求处理流程以及iOS/Mac应用的网络编程具有很高的学习价值。 ASIHTTPRequest的主要特点包括: 1. **异步请求处理**:ASIHTTPRequest支持异步发送...

    IOS应用源码之【应用】ASIHTTPRequest-强大的HTTP包装开源项目.rar

    ASIHTTPRequest提供了一套完整的请求管理机制,包括异步请求、上传/下载进度跟踪、自动处理cookies等功能,让开发者能更高效地构建网络功能丰富的iOS应用。 二、核心特性 1. **异步请求**:ASIHTTPRequest支持异步...

    ASIHTTPRequest网络API

    1. **异步请求**:ASIHTTPRequest支持异步网络请求,这意味着可以在不阻塞用户界面的情况下发送请求。这通过在后台线程执行网络操作并使用代理方法更新UI来实现。 2. **请求队列**:ASIHTTPRequest提供了请求队列,...

    ASIHTTPRequest

    2. **异步处理**:ASIHTTPRequest支持异步请求,这意味着可以在不阻塞用户界面的情况下发送网络请求,提高应用的响应性。 3. **缓存**:该库内置了缓存机制,可以自动或手动缓存HTTP响应,减少不必要的网络流量,...

    ASIHTTPRequest框架

    1. **异步与同步请求**:ASIHTTPRequest提供了异步请求的能力,允许应用程序在等待服务器响应的同时执行其他任务,提高了用户体验。同时,它也支持同步请求,适合在后台线程中使用,避免阻塞主线程。 2. **文件上传...

    IOS应用源码之ASIHttpDemo.zip

    2. **异步请求**:ASIHttpRequest支持异步请求,这样可以在请求后台执行时不影响用户界面。通过调用`-[ASIHttpRequest startAsynchronous]`方法,请求将在后台线程中启动。 3. **请求回调**:ASIHttpRequest提供了...

    ASIHTTPREQUEST

    2. **异步请求**:ASIHTTPRequest支持异步请求,允许在请求处理的同时更新用户界面,提高了应用的响应性。 3. **缓存机制**:它内置了HTTP响应缓存,可以节省网络带宽,提高应用性能,并在离线状态下提供数据。 4....

    ASIHTTP demo

    为了处理异步请求,ASIHTTP提供了`-[ASIHTTPRequest startAsynchronous]`方法,这样可以在后台线程中执行请求,不会阻塞主线程,保证了应用的流畅性。同时,通过实现`ASIHTTPRequestDelegate`协议,可以监听请求的...

    asihttprequest

    1. 异步请求:ASIHTTPRequest 支持异步请求,这意味着在发送请求时,应用程序可以继续执行其他任务,而不会阻塞用户界面。这提高了应用的响应速度和用户体验。 2. 请求队列:ASIHTTPRequest 包含一个请求队列,允许...

    ASIHTTPRequest第三方库

    7. **异步与同步请求**:ASIHTTPRequest支持异步和同步两种模式,异步请求在后台线程运行,不会阻塞主线程;同步请求则会等待请求完成才返回。 8. **处理响应**:库提供了一系列方法处理HTTP响应,如`-...

    ASIHTTPRequest.zip

    2. **异步请求**:ASIHTTPRequest支持异步请求,这允许应用程序在等待网络响应的同时执行其他操作,提高了用户体验。 3. **缓存支持**:它内置了对HTTP缓存的支持,可以自动处理缓存策略,减少不必要的网络请求。 ...

    iOS用ASIHTTP框架异步队列下载图片显示进度条

    ASIHTTPRequest是一个经典的网络请求库,它提供了丰富的功能来帮助开发者处理这些需求。本篇文章将详细讲解如何利用ASIHTTPRequest实现异步队列下载图片,并结合进度条显示下载动态。 首先,了解ASIHTTPRequest框架...

Global site tag (gtag.js) - Google Analytics