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

  • 相关阅读:
    css 基础
    css 基础-1
    html 入门2-表
    CMDB (后台管理) CURD 插件
    序列化
    AES(高级加密)
    API验证
    数据库取时间(分组)
    用户权限 (知识点)
    xss 过滤
  • 原文地址:https://www.cnblogs.com/yaoxc/p/3718812.html
Copyright © 2020-2023  润新知