开发者社区> 问答> 正文

异步请求数据,如何快速多次调用接口

请求同一个接口的数据,我现在是第一个请求成功后请求下一个,有没有其他更快的方法呢?网上说可以自定义几个串行队列,并发执行?求方法。谢谢

接口:


-(void)requestfilterData:(NSString *)item
{
    NSString *urlStr = [NSString stringWithFormat:@"%@/api/product/filter/list?filtername=%@" ,SERVER_ADDRESS,item];
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];

    [request setHTTPMethod:@"GET"];

    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError) {
            NSLog(@" good commet list recv data error");
        }else
        {
            [self receivedfilterConditionsReturnJSON:data];
        }
    }];
}

-(void)receivedfilterConditionsReturnJSON:(NSData *)data
{
    NSError *localError = nil;

    id parsedObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&localError];
    if (localError != nil) {

        NSLog(@"sport train filter list  JSON data error: %@", [localError description]);
        return;
    }

    NSDictionary *recvDic = (NSDictionary *)parsedObject;
    //接收商品评论数据
    NSString *result =  [recvDic objectForKey:@"result"];

    if ([result isEqualToString:@"1"]) {

        dispatch_async(dispatch_get_main_queue(), ^{

            [self showItemController:recvDic];
        });
    }
}

需求:实在页面出现的时候,要根据参数分三次调用这个接口(服务端就是这么设计的,并不是一次返回了)。

展开
收起
a123456678 2016-07-29 10:11:46 4941 0
1 条回答
写回答
取消 提交回答
  • 谢邀。第一次被邀请 必须好好回答。
    建议阅读同步与异步
    看了下您的问题,但是总觉得你对同步和异步的理解有差(可能是我看错了),但是我建议首先阅读下这篇文章
    NSURLConnection的使用
    虽然讲的是如何使用,但是作者很好的诠释了同步和异步的区别,也有实际例子来阐述两者。

    建议阅读-NSOperationQueue
    有了同步与异步,那么解决这个问题还需要多线程和队列的知识,阅读下下面的链接
    使用NSOperationQueue简化多线程开发和队列的优先级

    楼主的问题解析
    楼主可否思考下,如何将上面的两者结合下,运用于自己的程序中?
    思路一:直接多线程执行...
    这里我们使用上面我提到的[NSURLConnection的使用]的代码为例子,github地址:code source 请自己下载下来
    //ViewController.m中的viewDidLoad

    • (void)viewDidLoad
      {

      [super viewDidLoad];
      

    // [self fetchAppleHtml];
    // [self fetchYahooData];
    // [self fetchYahooData];

    [self fetchYahooData2_GCD];
    [self fetchYahooData2_GCD];//连续两次运行试一下,看下打印的信息

    // [self httpGetWithParams];
    }

    2019-07-17 20:01:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
fibjs 模块重构从回调到协程 立即下载
fibjs 模块重构从回调到协程--陈垒 立即下载

相关实验场景

更多