欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS学习笔记 -- 多个网络请求的处理

程序员文章站 2022-06-02 19:07:01
...
在开发中,经常可以看见有这样的需求,就是一个方法要等另外一个方法执行完毕再做相对应的处理,比如说一些网络请求,需要根据上一个请求的返回值做相对应的处理再执行第二个请求,所以我们不能让两个请求同时去请求网络。下面通过GCD和NSOperationQueue来处理这个问题。
GCD方法:
//创建信号量
     __block dispatch_semaphore_t test = dispatch_semaphore_create(0);

//创建队列
        dispatch_queue_t queue = dispatch_queue_create("testBlock", NULL);

        dispatch_async(queue, ^{

            for (int i = 0; i< 4; i++)
            {
                NSLog(@"i的值是:%d",i);

                tempStr = [NSString stringWithFormat:@"%d",i];
            }
  //发送通知

            dispatch_semaphore_signal(test);


        });

  //信号量等待
        dispatch_semaphore_wait(test, DISPATCH_TIME_FOREVER);

        if([tempStr isEqualToString:@"5"])
        {
            for (int j = 0; j<5; j++)
            {

                NSLog(@"j的值是:%d",j);


            }
        }
NSOperationQueue 方法
 //创建一个队列
        NSOperationQueue * queueeTest = [[NSOperationQueue alloc]init];

 //设置最线程数

queueeTest.maxConcurrentOperationCount = 4;

 //创建一个a操作
        NSBlockOperation * optionA = [NSBlockOperation blockOperationWithBlock:^{

            for (int i = 0; i<10000; i++)
            {
                NSLog(@"i的值是:%d",i);
            }
        }];

 //创建一个b操作
        NSBlockOperation * optionB = [NSBlockOperation blockOperationWithBlock:^{

            for (int j = 0; j<20000; j++)
            {
                NSLog(@"j的值是:%d",j);
            }
        }];

 //B操作依赖于a操作
        [optionB  addDependency:optionA];
 //分别加入队列

        [queueeTest addOperation:optionA];

        [queueeTest addOperation:optionB];

相关标签: GCD