`

asihttp 源码分析 之三 startRequest 各种回调

 
阅读更多


 SEL didStartSelector;
 SEL didReceiveResponseHeadersSelector;

 SEL willRedirectSelector;

 SEL didFinishSelector;
 SEL didFailSelector;
 SEL didReceiveDataSelector;

 

各种SEL 的调用时机。

1: SEL didStartSelector;

- (void)startRequest 一开始就调用了requestStarted。

[self performSelectorOnMainThread:@selector(requestStarted) withObject:nil waitUntilDone:[NSThread isMainThread]];

 

/* ALWAYS CALLED ON MAIN THREAD! */
- (void)requestStarted
{
 if ([self error] || [self mainRequest]) {
  return;
 }
 if (delegate && [delegate respondsToSelector:didStartSelector]) {
  [delegate performSelector:didStartSelector withObject:self];
 }
 if (queue && [queue respondsToSelector:@selector(requestStarted:)]) {
  [queue performSelector:@selector(requestStarted:) withObject:self];
 }
 #if NS_BLOCKS_AVAILABLE
 if(startedBlock){
  startedBlock();
 }
 #endif
}

 

2: SEL didReceiveResponseHeadersSelector;

 

/* ALWAYS CALLED ON MAIN THREAD! */
- (void)requestReceivedResponseHeaders:(NSMutableDictionary *)newResponseHeaders
{
 if ([self error] || [self mainRequest]) {
  return;
 }

 if (delegate && [delegate respondsToSelector:didReceiveResponseHeadersSelector]) {
  [delegate performSelector:didReceiveResponseHeadersSelector withObject:self withObject:newResponseHeaders];
 }
 if (queue && [queue respondsToSelector:@selector(request:didReceiveResponseHeaders:)]) {
  [queue performSelector:@selector(request:didReceiveResponseHeaders:) withObject:self withObject:newResponseHeaders];
 }
    
 #if NS_BLOCKS_AVAILABLE
 if(headersReceivedBlock){
  headersReceivedBlock(newResponseHeaders);
    }
 #endif
}

 

 

3: SEL willRedirectSelector;

/* ALWAYS CALLED ON MAIN THREAD! */
- (void)requestWillRedirectToURL:(NSURL *)newURL
{
 if ([self error] || [self mainRequest]) {
  return;
 }
 if (delegate && [delegate respondsToSelector:willRedirectSelector]) {
  [delegate performSelector:willRedirectSelector withObject:self withObject:newURL];
 }
 if (queue && [queue respondsToSelector:@selector(request:willRedirectToURL:)]) {
  [queue performSelector:@selector(request:willRedirectToURL:) withObject:self withObject:newURL];
 }
}

 

 

SEL requestFinished

 

 

/* ALWAYS CALLED ON MAIN THREAD! */
- (void)reportFinished
{
 if (delegate && [delegate respondsToSelector:didFinishSelector]) {
  [delegate performSelector:didFinishSelector withObject:self];
 }
 if (queue && [queue respondsToSelector:@selector(requestFinished:)]) {
  [queue performSelector:@selector(requestFinished:) withObject:self];
 }
#if NS_BLOCKS_AVAILABLE
 if(completionBlock){
  completionBlock();
 }
#endif
}

 

SEL requestFailed

 

/* ALWAYS CALLED ON MAIN THREAD! */
- (void)reportFailure
{
 if (delegate && [delegate respondsToSelector:didFailSelector]) {
  [delegate performSelector:didFailSelector withObject:self];
 }
 if (queue && [queue respondsToSelector:@selector(requestFailed:)]) {
  [queue performSelector:@selector(requestFailed:) withObject:self];
 }
 #if NS_BLOCKS_AVAILABLE
    if(failureBlock){
        failureBlock();
    }
 #endif
}

 

 

 

分享到:
评论

相关推荐

    ASIHttp.rar_asihttp

    4. **进度回调**:ASIHttpRequest提供了下载和上传进度的回调接口,开发者可以利用这些接口实时更新UI,显示下载或上传的进度,让用户了解任务状态。 5. **错误处理**:ASIHttpRequest提供了丰富的错误处理机制,当...

    ASiHTTP.zip

    综上所述,ASiHTTP.zip的内容可能包括ASiHTTP库的源码和示例,供开发者学习如何在ARC环境下解决兼容性问题,或者如何将其转换为静态库以避免这些问题。对于初学者或有经验的iOS开发者来说,理解ARC的工作原理,以及...

    ASIHTTP demo

    其次,ASIHTTP 提供了进度回调机制,可以方便地跟踪下载进度。在`ASIHTTPRequest`中,你可以设置`requestDidReceiveBytes:`和`requestDidFinish:`代理方法,或者监听`downloadProgressDelegate`属性,以实时更新下载...

    ASIHTTP资源包

    2. **设置请求头**:可以添加自定义请求头,例如`[request setHeaderValue:@"application/json" forHTTPHeaderField:@"Content-Type"]`。 3. **发送POST数据**:可以方便地附加POST参数,`[request appendPostData:...

    ASIhttp得力助手

    4. **处理cookies**:ASIHTTP自动处理服务器返回的cookies,可以通过`- (void)addCookie:(NSHTTPCookie *)cookie`手动添加cookie,或者通过`- (NSArray *)cookies`获取当前请求的所有cookies。 5. **请求队列管理**...

    ASIHTTPRequest+UITableView实现多个下载任务

    在iOS开发中,实现多个下载任务是常见的需求,特别是在处理数据量大或者用户需要离线浏览的情况下。本项目使用了ASIHTTPRequest库与UITableView相结合来实现这一功能。...而UITableView则是iOS中用于展示列表数据的组件...

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

    可以使用`-setCompletionBlock:`方法设置下载完成后的回调,在这里处理图片的保存和显示。 ```objc request.completionBlock = ^{ UIImage *image = [UIImage imageWithData:request.responseData]; // 保存图片...

    ios-ASIHttp天气预报.zip

    利用ASIHttp第三方库,,获取网络请求,,获得天气预报,,,代码显示天气预报效果默认是河南郑州,,亲们可以自己输入并查询自己想知道的城市天气情况,,堪比真机天气

    ASIHTTP+JSON+Google地图,多线程实现加载DEMO

    在iOS开发中,ASIHTTP和JSON是两个非常重要的技术组件,常常用于网络数据的请求与解析,而Google地图API则提供了强大的地图展示功能。在这个"ASIHTTP+JSON+Google地图,多线程实现加载DEMO"中,我们将探讨如何将这些...

    ios_ASIHttp框架详解

    ASIHTTPRequest的详细介绍还包括 同步 异步 缓存 请求网络数据与传输数据

    ASIHTTPRequest第三方库

    例如,`[request setDownloadProgressDelegate:delegate]` 和 `request setUploadProgressDelegate:delegate]` 分别用于设置下载和上传进度的回调代理。 5. **请求头和HTTP方法**:ASIHTTPRequest支持自定义HTTP头...

    ASIHTTPRequest常用类包

    4. **进度回调**: 提供了请求进度的回调函数,可以实时更新下载或上传的进度。 5. **自定义头信息**: 允许设置自定义的HTTP头字段,以适应各种服务器需求。 6. **请求取消**: 支持在运行时取消正在进行的请求。 7. *...

    ios开发常用第三方类库集合

    整理的一些市面上常见的第三方类库,快速集成可以方便开发,这些都是大家常用的。 里面包含: GTM 各种加密 ASIHttp http请求 KissXml xml解析 json oc版 json cpp版 Reachabiliy 网络状态判断 libcurl c语言静态...

    asihttprequest使用指南

    使用block可以简化回调函数的编写,使代码更简洁。 ```objective-c ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; [request setCompletionBlock:^{ /...

    进入网络请求,对返回的XML数据进入处理

    XMLParserSDK是一个解析XML数据的工具,它提供了基于事件驱动的解析方式,即当解析器遇到XML文档中的特定元素时,会触发相应的回调函数。 使用XMLParserSDK解析XML数据的基本流程: 1. 初始化解析器:创建`...

    中国电视节目查询

    使用ASIHttp的优点包括异步请求处理、支持上传和下载进度回调、以及自动处理cookies。然而,需要注意的是,尽管ASIHttp在过去的开发中非常流行,但由于其不再维护,开发者现在更倾向于使用Apple的URLSession或第三方...

    ASI库+练习Demo+服务器

    ASIHTTP库是一个经典的Objective-C编写的网络请求框架,主要用于iOS和Mac OS X平台。这个库在iOS开发领域曾经非常流行,特别是在HTTP请求处理方面,它提供了简单易用的API,支持GET、POST等多种HTTP方法,同时也包含...

    ASIHttpRequest.zip

    3. 设置回调:可以通过代理方法或者block来设置请求完成、失败、进度等回调。 4. 添加请求头:可以使用`-[ASIHttpRequest setRequestHeader:forKey:]`添加自定义请求头。 5. 设置请求体:对于POST请求,可以使用`-...

    同步与异步

    然而,异步操作需要更复杂的管理,因为它涉及到回调函数或闭包来处理完成后的结果。 ASIHTTP是一个Objective-C编写的HTTP客户端库,它支持同步和异步请求。ASIHTTPRequest类提供了丰富的功能,如缓存、请求队列管理...

    取消同步的ASIHTTPRequest请求

    在网络访问时,一般都建议用异步访问,但是异步访问的话,需要传入delegate,并处理回调。不利于将所有的网络访问的方法集中到一个类中,所以我采用同步访问的方式。后来产品部们要求网络访问可以取消,但是ASIHTTP ...

Global site tag (gtag.js) - Google Analytics