月圆之夜,紫禁之巅,一剑西来,天外飞仙。

0%

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

1
在开发中,经常可以看见有这样的需求,就是一个方法要等另外一个方法执行完毕再做相对应的处理,比如说一些网络请求,需要根据上一个请求的返回值做相对应的处理再执行第二个请求,所以我们不能让两个请求同时去请求网络。下面通过GCD和NSOperationQueue来处理这个问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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);


}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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];