`

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资源包

    ASIHTTPRequest

    ASIHttp.rar_asihttp

    基于ASIHttpRequest 网络框架实现,可以实现多个任务同时下载,断点续传等功能 ,用于ios客户端下载功能实现

    ASiHTTP.zip

    AS在ARC模式下警告繁多,即使一一修改过也会出现问题,做成静态库可以避免,本来是想做成动态的但是不知道模拟器和真机两种怎么合并,分享一下

    ASIHTTPRequest+UITableView实现多个下载任务

    ASIHTTPRequest+UITableView实现多个下载任务,没用到重用机制,还有没有实现断点续载,很简单的一个demo,相信初学者都能看懂,还写了一些注释。

    ios-ASIHttp天气预报.zip

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

    ASIHTTP demo

    异步下载图片 进度显示 里面有注释,简单易懂。

    ios_ASIHttp框架详解

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

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

    如题所示: ASIHTTP+JSON+Google地图,多线程实现加载DEMO, iphone 平台下经典代码

    ASIhttp得力助手

    网络编程有力助手,让我们的开发不在重复!更好 更快!你懂得!

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

    ASIHTTPRequest的简单实用,实现异步队列下载图片,并结合进度条显示下载动态,限制了同时下载线程为3,可修改

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

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

    ASIHTTPRequest第三方库

    ASIHTTPRequest第三方库 使用该库可以轻松地请求 放在这里本着和大家一起学习地目的 欢迎大家下载使用 用什么不懂的请留言

    取消同步的ASIHTTPRequest请求

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

    同步与异步

    同步与异步 ASIHTTP NSURL

    ASIHTTPRequest常用类包

    根据官方安装流程所整理出来的必要ASIHTTPRequest资源库包

    asihttprequest使用指南

    网络请求第三方库的应用 asihttprequest

    IOS ASIHttpRequest资源包

    ASIHTTPRequest是简单易用的,它封装了CFNetwork API。使得与Web服务器通信变得更简单。它是用Objective-C编写的,可以在MAC OS X和iPhone应用中使用。 ...ASIFormDataRequest子类可以简单的实现提交数据和文件。

    使用ASIhttprequest类库上传文件到php服务器之iOS客户端方法

    这时ios中的使用asihttp类库上传文件到php服务器,关于php服务器接收文件见我的另一篇文章

    中国电视节目查询

    ASIHttp的使用 xml解析 自定义cell

    ASI库+练习Demo+服务器

    此压缩包包括:ASIHTTP三方库,练习上传下载的Demo和练习的服务器,具体步骤也可参考本人博客,谢谢

Global site tag (gtag.js) - Google Analytics