首页 > 代码库 > ASIHTTPRequest框架使用(3)--多线程并发请求

ASIHTTPRequest框架使用(3)--多线程并发请求

需要的类:ASIHTTPRequest和ASINetworkQueue。

ASIHTTPRequest被设计成NSOperation子类,ASINetworkQueue被设计成NSOperationQueue子类。

NSOperationQueue和NSOperation关系的形象比喻:

NSOperationQueue看成一个线程管理器,那么一个NSOperation就相当于一个线程,它们被添加到NSOperationQueue队列中有序地执行。

ASINetworkQueue和ASIHTTPRequest也可以看成上面的概念。

 

@interface viewController : UIViewController

@property (strong) ASINetworkQueue *networkQueue;

- (IBAction)onClick:(id)sender;

@end

 

- (IBAction)onClick:(id)sender

{

  if(!_networkQueue)

  {

    _networkQueue = [[ASINetWorkQueue alloc] init];                          【1】

  }

  // 停止以前的队列

  [_networkQueue cancelAllOperations];                                                 【2】

  // 创建ASI队列

  [_networkQueue setDelegate:self];

  [_networkQueue setRequestDidFinishSelector:@selector(requestFinished:)];    【3】

  [_networkQueue setRequestFailSelector:@selector(requestFailed:)];                 【4】

  [_networkQueue setQueueDidFinishSelector:@selector(queueFinished)];         【5】

  

  for (int i = 0 ; i < 3 ; i++)

  {

    NSString *strUrl = [[NSString alloc] initWithFormat:@"http://iosbook3.com/service/download.php?                  email=%@&type=%@&action=%@",@"ios_yaoxinchao@163.com",@"JSON",@"query"];   

    NSURL *url = [NSURL URLWithString:[strUrl URLEncodedString]];  

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    request.tag = i;                                                                                      【6】

    // 将线程任务添加到队列 

    [_networkQueue  addOperation:request];                                           【7】    

  }

  [_networkQueue go];                                                                                   【8】

}

【1】:创建ASINetworkQueue对象

【2】:停止以前的队列

【3】:设置请求成功的回调

【4】:设置请求失败的回调

【5】:设置队列完成(所有请求完成)的回调方法

【6】:由于有多个请求,请求成功还是失败他们都调用同样的方法,通过请求对象的tag属性区分返回的是哪一个请求

【7】:将请求对象放入队列

【8】:执行队列

实现代理方法:

......

【注】:[_networkQueue requestsCunt]可以判断队列中请求对象的个数。