• 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]可以判断队列中请求对象的个数。

  • 相关阅读:
    485串口接线
    mvc3 升级mvc5
    VB连接ACCESS数据库,使用 LIKE 通配符问题
    VB6 读写西门子PLC
    可用的 .net core 支持 RSA 私钥加密工具类
    解决 Win7 远程桌面 已停止工作的问题
    解决 WinForm 重写 CreateParams 隐藏窗口以后的显示问题
    解决安装 .net framework 发生 extracting files error 问题
    CentOS7 安装配置笔记
    通过特殊处理 Resize 事件解决 WinForm 加载时闪烁问题的一个方法
  • 原文地址:https://www.cnblogs.com/yaoxc/p/3718812.html
Copyright © 2020-2023  润新知