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
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值